为什么jQuery不会调用我的Ajax错误处理程序?

时间:2010-12-10 09:39:58

标签: ajax jquery error-handling

我有以下jQuery Ajax调用(没有其他全局设置/处理程序):

$.ajax( { 
   url: "http://www.blah.com/url/does/not/exist", 
   type: "get",
   data: someData,
   dataType: "json",
   error: function (xhr, msg, ex)
   {
       alert("Failed: " + msg);
   },
   complete: function (xhr, msg)
   {
       alert("Done: " + msg);
   }

我希望调用我的错误处理程序,但是complete事件会触发,警报会显示Done: success。在我的Javascript控制台中,我看到以下消息:

XMLHttpRequest cannot load http://www.blah.com/url/does/not/exist. 
Origin null is not allowed by Access-Control-Allow-Origin.
  1. 为什么我的错误处理程序不会被调用?
  2. 登录到控制台的Origin消息的含义是什么?
  3. 谢谢!

2 个答案:

答案 0 :(得分:2)

看起来唯一的方法是在我的success方法中接收服务器响应并将其存储在全局变量中,我将检查complete的处理程序(总是被调用) 。没有回复意味着请求失败。

在这个优秀的图书馆中处理错误是一种伪劣的方式。

答案 1 :(得分:1)

您的错误处理程序未被调用,因为甚至没有发生AJAX请求:浏览器拒绝执行此操作因为same origin policy:您请求的数据来自不同的网站而不是一个为您的页面服务。

您可以尝试使用JSONP数据类型来解决此问题:

$.ajax({ 
    url: "http://www.blah.com/url/does/not/exist", 
    type: "get",
    data: someData,
    dataType: "jsonp",
    error: function(xhr, msg, ex) {
        alert("Failed: " + msg);
    },
    complete: function(xhr, msg) {
       alert("Done: " + msg);
    }
});