Jquery ajax错误回调

时间:2010-09-04 12:48:33

标签: 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回调会在响应时正确触发。但是,我注意到我的error回调每次都被触发,即使我的调用返回成功状态200.在上面的error回调中,我看到对象xhr.status是200。

有人可以解释什么是错的,或者这里发生了什么?只有当我有404或非200响应时才会触发error回调。我的假设是否正确?

感谢。

6 个答案:

答案 0 :(得分:30)

只是一个建议,请尝试使用$.ajaxSetup()来获取正确的错误:

$(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);
            }
        }
    });
});

答案 1 :(得分:28)

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

答案 2 :(得分:2)

我能想到的一些事情:

  1. 通过设置cache: false
  2. 确保您已禁用缓存
  3. 如果您使用的是Firefox,请尝试使用Firebug和Net标签来监控请求
  4. 不要依赖浏览器的JSON解析器。我会推荐这个:来自JSON的创建者的https://github.com/douglascrockford/JSON-js/blob/master/json2.js

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我不是jQuery专家,但我知道使用Prototype.js,如果请求成功但是success处理程序导致错误,则会触发AJAX错误处理程序。在jQuery中是一样的吗?您可以通过将display_counts的全部内容放在try..catch block中来测试这是否正在发生。

答案 5 :(得分:-1)

dataTypeplain/text更改为html