jQuery ajax错误回调没有触发

时间:2011-07-07 18:03:50

标签: jquery ajax error-handling callback

我正在请求带有ajax的URL,导致HTTP标头代码为500.我希望这会触发错误功能:

    $.ajax({
  url: "http://xxx",
  dataType: "jsonp",
  crossDomain: true,
  success: function( data ) {
        alert('success');
  },
  error: function () {
        alert('error');
  }
});

这适用于safari,但在chrome和firefox中失败。

我做错了什么?

这是最新的jquery 1.4.X,因为我无法升级到更高版本..

响应发送HTTP代码500,内容类型application / json和contents:

jsonp1310063232212({“error”:{“reason”:“找不到用户”}})

3 个答案:

答案 0 :(得分:6)

如JQuery文档[1]所述,不会为跨域脚本和JSONP请求调用错误处理程序。它在旧版本的JQuery上工作(并不总是)。

我使用一个包含一个漂亮的错误处理程序的紧凑而有效的插件来解决: http://code.google.com/p/jquery-jsonp/

下载并添加到头部:

<script src="javascripts/jquery.jsonp-2.2.0.min.js" type="text/javascript"></script>

然后你可以使用类似$ .ajax()的函数$ .jsonp():

$.jsonp({
    url: "http://xxx?callback=?",
    data: {
        var: 'test'
    },
    cache: false,
    success: function(data, textStatus) {
        // ...
    },
    error: function(xOptions, textStatus) {
        console.log('Error');
        // ...
    }
});

[1] http://api.jquery.com/jQuery.ajax/

答案 1 :(得分:3)

看起来直到jQuery 1.5才添加crossDomain:

http://api.jquery.com/jQuery.ajax/

  

crossDomain(已添加1.5)

     

默认值:false   对于同域请求,对于   跨域请求。

     

如果你愿意的话   强制执行跨域请求(例如   JSONP)在同一个域上,设置了   crossDomain的值为true。这个   例如,允许服务器端   重定向到另一个域

就像Martin Larente在评论中所说,这可能是不同浏览器或jQuery如何检测/报告JSONP错误的问题。

答案 2 :(得分:2)

这看起来似乎存在突出问题。 Abort JSONP ajax request with jQuery