jqueryajax错误回调

jqueryajax错误回调,jquery,ajax,Jquery,Ajax,我需要一些建议或者解释。我有一个jquery ajax调用 $.ajax({ type: "GET", url: base_url+'/ajax/fetch/counts/', dataType: 'json', data: {}, error: function(xhr, error){ console.debug(xhr); console.debug(error); }, success: display_counts }); 很好用。我的success回调

我需要一些建议或者解释。我有一个jquery ajax调用

$.ajax({
 type: "GET",
 url: base_url+'/ajax/fetch/counts/',
 dataType: 'json',
 data: {},
 error: function(xhr, error){
        console.debug(xhr); console.debug(error);
 },
 success: display_counts
});
很好用。我的
success
回调正确触发并有响应。但是,我注意到我的
错误
回调每次都被触发,即使我的调用返回成功状态200。在上面的
error
回调中,我看到对象
xhr.status
是200

有人能解释一下这里出了什么问题,或者发生了什么事吗<代码>错误回调应该只在我有404或可能是非200响应时触发。我的假设正确吗


谢谢。

A对
json
jquery请求有类似的问题,请尝试从json响应中删除周围的
()

我可以想到以下几点:

  • 通过设置
    cache:false
    ,确保已禁用缓存
  • 如果您使用的是Firefox,请尝试使用Firebug和Net选项卡来监视请求
  • 不要依赖浏览器的JSON解析器。我推荐这一条:来自JSON的创建者

  • 我不是jQuery专家,但我知道,对于Prototype.js,如果请求成功,AJAX错误处理程序就会触发,但是
    success
    处理程序会导致错误。在jQuery中也是这样吗?您可以通过将
    显示计数的全部内容放在一个列表中来测试是否发生了这种情况。

    只是一个建议,请尝试使用以获得如下所示的正确错误:

    $(function() {
        $.ajaxSetup({
            error: function(jqXHR, exception) {
                if (jqXHR.status === 0) {
                    alert('Not connect.\n Verify Network.');
                } else if (jqXHR.status == 404) {
                    alert('Requested page not found. [404]');
                } else if (jqXHR.status == 500) {
                    alert('Internal Server Error [500].');
                } else if (exception === 'parsererror') {
                    alert('Requested JSON parse failed.');
                } else if (exception === 'timeout') {
                    alert('Time out error.');
                } else if (exception === 'abort') {
                    alert('Ajax request aborted.');
                } else {
                    alert('Uncaught Error.\n' + jqXHR.responseText);
                }
            }
        });
    });
    

    对http错误调用错误回调,但如果响应上的JSON解析失败,也会调用错误回调。如果响应代码为200,但您仍被抛出错误回调,则可能会发生这种情况。

    数据类型
    纯/文本
    更改为
    html

    有趣的是,我遇到了一个类似的问题,通过添加括号进行了修复。@Coronatus是的,这是我通常做的,但是jQuery1.4.2开始依赖浏览器的
    JSON.parse
    ,我的firefox的
    JSON.parse
    将成功解析
    {key:“value”}
    ,但在
    ({“key:“value”})
    上发出一个错误。为了避免浏览器解析JSON的差异,我建议使用Douglas Crockford的解析器:“琐碎且明显”-嗯,那简直太苛刻了。:)如果这真的太苛刻了,我很抱歉+1已用于引用JSON解析器内容。:)@SimpleCoder“不依赖浏览器的JSON解析器”??为什么?现在也是这样吗???@mfadel:一些较旧的浏览器不支持JSON,因此首先使用第三方解析器可以避免兼容性问题。如果您希望得到非JSON响应。您可以将dataType选项设置为script/text…etc签出,并在dataFilter下查看更多信息。我正在调用一个cgi脚本,我需要它以json格式转储数据。它返回的字符串失败。请注意:全局回调函数应使用各自的全局Ajax事件处理程序方法设置-.ajaxStart(),.ajaxStop(),.ajaxComplete(),.ajaxError(),.ajaxSuccess(),.ajaxSend()-而不是在$.ajaxSetup()的选项对象内。因此,这似乎更好地应用于一个非常重要的问题,当然要意识到,如果用户的internet连接不稳定,您的ajax可能会在用户的计算机上失败。因此,您的应用程序可以正常工作,但由于互联网连接不良,他们收到失败的ajax请求-这似乎可以通过上面的
    状态===0
    异常==='timeout'
    案例来识别。还请注意,文档中指出:“这可能会导致其他调用者(例如插件)出现不良行为。”可能需要正常的默认设置。因此,我们强烈建议不要使用此API。“…但OP甚至没有纯文本数据类型