jQuery AJAX post回调似乎不起作用

3

我经常这样做:

var url = '/offers/1/voting';
var params = { 'direction': 'up' };
$.post(url, params, function() {
  alert('callback');
}); // post

我在这个例子中硬编码了值,但是没有任何问题。

所以,通过Firebug,我收到了期望的JSON响应(200状态),但回调函数并没有执行。这几乎是我使用的唯一JavaScript。我尝试过使用jquery 1.6.4和1.7.1,但两者都是一样的结果。我不知道我错过了什么。

帮助我,Stack Overflow。你是我的唯一希望。

2个回答

11
如果您使用$.ajax而不是$.post($.post实际上是$.ajax的覆盖版本,参数更少),则可以添加一个错误处理程序并查看它是否触发:
jQuery.ajax({
        type: "POST",
        async: true,
        url: '/offers/1/voting',
        data:  { 'direction': 'up' },
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (msg) 
                { alert('success') },
        error: function (err)
        { alert(err.responseText)}
    });

它使用我的响应触发了错误回调。我以为当响应代码!= 200时,错误回调会被触发,但我一定是错的。因此,可能我在我的控制器中做错了什么。现在我必须检查一下。谢谢Andrey! - anders
1
如果在POST请求的响应中没有返回任何数据,那么jQuery的JSON解析器将无法解析空响应(空不是有效的JSON),并且尽管返回200 OK状态码,但会返回错误。请注意,dataType参数是根据$.post的文档定义的从服务器返回的数据的格式,而不是传递给服务器的数据的格式。如果您知道响应是空的,请将dataType更改为"text",然后您应该能够看到成功处理程序被触发。 - Steve Grove
我想进一步解释@SteveGrove的评论 - 不仅是空响应,而是任何非JSON响应。比如说,如果你发布一个投票并返回一个新的投票数只是一个数字,那么jQuery将无法将其解析为JSON,从而抛出错误。 - Andrey

-1

试试这个

$.post(url, params, function(callback) { alert(callback); });


你有收到警告吗?还是你只是收到了一个空白的警告? - Kishore
这是一个错误响应,我还需要研究一下。请参考安德烈的回答:https://dev59.com/9F3Va4cB1Zd3GeqPDcGb#8314969 - anders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接