jQuery ajax回调从未调用过

时间:2011-12-14 18:09:33

标签: javascript jquery jquery-callback

Javascript代码,使用jQuery 1.7:

$( function() { 
  $.get('/ajax_dummy', function() { alert('foo');  })
});

使用Firebug,我可以看到HTTP GET请求已发送,并返回代码为200的“hello world”响应,因此一切似乎都很好。但回调永远不会被调用。

我不知道出了什么问题;这应该是这么简单吧?

4 个答案:

答案 0 :(得分:9)

您没有提供dataType,因此jQuery会对您所说的Content-Type响应application/json标题中的内容类型进行“智能猜测”。

因此jQuery将响应视为JSON,这意味着它将尝试自动解析它,从而导致错误。

因为请求导致错误

$.parseJSON( "hello world" );
"Invalid JSON: hello world"

成功回调显然不会被解雇。

答案 1 :(得分:5)

给这个撕裂:

$.ajax("/ajax_dummy", {
    dataType: "text",
    success: function() {
        console.log("winning.");
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log(textStatus); //error logging
    }
});

答案 2 :(得分:0)

添加此标记

<div id="error"></div>

然后添加此处理程序以捕获AJAX错误

$("#error").ajaxError(function(event, request, settings){
  $(this).append("<li>Error requesting page " + settings.url + "</li>");
});

或者,您可以像这样重写原始代码

$.get('/ajax_dummy', function() { 
    alert('foo');  
}).error(function() {
    // catch error
});

答案 3 :(得分:0)

这是因为根据文档,$ .get()语法应该像这样

jQuery.get( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )

请注意“成功”回调选项。基于状态代码(200)在请求成功时调用的成功回调。但您的网址可能不是有效路径或返回一些其他状态代码(404),意味着“找不到文件”,因此会发生错误。所以成功方法从未被称为。

您的语法也没有定义“错误”回调。检查以下更完整的代码

$.get("/ajax_dummy", function() { alert('foo'); })
  .error(function(d,e) { alert(e); })
  .complete(function() { alert("complete"); });