为什么jQuery在ajax调用失败时不会引发错误事件

时间:2011-11-15 09:19:40

标签: jquery ajax

为什么执行以下脚本时jQuery不会引发任何error事件?

以为我已经注册了错误事件,但它没有被解雇。

chrome在Network的{​​{1}}标签中显示以下错误。

Console

的javascript:

GET http://www.google.com/adfdaf?callback=jQuery15204572567550931126_1321347602706&_=1321348668347 404 (Not Found)

3 个答案:

答案 0 :(得分:5)

.ajax的jQuery文档声明如下:

  

错误(jqXHR,textStatus,errorThrown)

     

如果是,则调用的函数   请求失败。该函数接收三个参数:jqXHR(in   jQuery 1.4.x,XMLHttpRequest)对象,描述类型的字符串   发生的错误和可选的异常对象(如果发生)。   第二个参数的可能值(除了null)是“超时”,   “错误”,“中止”和“parsererror”。发生HTTP错误时   errorThrown接收HTTP状态的文本部分,例如   “未找到”或“内部服务器错误”。截至jQuery 1.5,错误   设置可以接受一系列功能。每个函数都会被调用   反过来。 注意:不会为跨域脚本调用此处理程序   JSONP请求。

您可以改用.getJSON。例如:

$.getJSON("url?callback=?", function() {
    //Success!
}).error(function() {
    //Error!
});

修改

看起来这也无效。似乎解决方法是为timeout提供.ajax选项:

$.ajax({
    type: "GET",
    url: 'http://google.com/adfdaf?callback=?',
    dataType: "jsonp",
    timeout: 5000,
    success: function (msg) {
        console.log('Custom Domain validated successfully.');
    },
    error: function () {
        console.log('Error occured while validating Custom Domain.');
    }
});

显然,这并不理想,但错误处理程序将在5秒后运行。

答案 1 :(得分:0)

From the documenation

注意:不会为跨域脚本和JSONP请求调用此处理程序

我可能搞砸了我的术语,但我假设谷歌请求这是一个跨域请求。

答案 2 :(得分:0)