jQuery ajax错误回调没有触发

Wes*_*ley 6 ajax error-handling jquery callback

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

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

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

我究竟做错了什么?

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

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

jsonp1310063232212({"error":{"reason":"User not found"}})

mic*_*red 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>
Run Code Online (Sandbox Code Playgroud)

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

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

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


day*_*ker 3

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

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

跨域(1.5新增)

默认值:同域请求为 false,跨域请求为 true。

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

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