12

Javascript 代码,使用 jQuery 1.7:

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

使用 Firebug,我可以看到发送了 HTTP GET 请求并返回了代码为 200 的“hello world”响应,所以一切看起来都很好。但是永远不会调用回调。

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

4

4 回答 4

11

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

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

因为请求导致错误

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

成功回调显然不会被触发。

于 2011-12-14T18:49:52.503 回答
6

试一试:

$.ajax("/ajax_dummy", {
    dataType: "text",
    success: function() {
        console.log("winning.");
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log(textStatus); //error logging
    }
});
于 2011-12-14T18:23:54.467 回答
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
});
于 2011-12-14T18:17:47.523 回答
0

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

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

请注意“成功”回调选项。根据状态码 (200) 请求成功时调用的成功回调。但您的 url 可能不是有效路径或返回一些其他状态代码 (404),意思是“找不到文件”,因此会发生错误。所以从未调用过成功方法。

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

$.get("/ajax_dummy", function() { alert('foo'); })
  .error(function(d,e) { alert(e); })
  .complete(function() { alert("complete"); });
于 2011-12-14T19:47:40.193 回答