当HTTP状态代码为403时,不会触发Ajax回调

时间:2014-04-30 21:59:57

标签: jquery ajax

我需要使用AJAX为我的脚本中的跨域域名检索HTML status code。关于jqXHR对象,我真正关心的是statusstatusText键。它适用于任何类型的状态代码,但403 (Forbidden)

除外

不幸的是,我无法提供域名,也无法找到测试域来返回403.

当域返回403时,它会在控制台中显示以下内容,但不会向控制台发送任何其他内容。

GET http://THEDOMAIN/?callback=jQuery110102736124559305608_1398894659852&_=1398894659853 403 (Forbidden) 

因为它是Cross-Domain请求,所以我使用jsonp,这对于返回给我的每个其他状态代码都很有效。

JQuery 1.10.1

$.ajax({
    url: "http://google.com", // Replace with 403 domain.
    dataType: 'jsonp',
    //async: false,
    //type: "get",
    statusCode: {
        403: function (xhr) {
            console.log('403 response');
        }
    },
    success: function (data, status) {
        alert(status);
    },
    error: function (xhr, desc, err) {
        alert(xhr.status);
    }
});

JSFIDDLE

answer和设置async: false无法正常工作,Google对此问题的帮助不大。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

选择jQuery 2.x时,会调用错误回调,但响应代码为404而不是实际的403。

内部jQuery使用<script />元素进行跨域通话,它检查loadreadystatechange事件,加载脚本失败时都不会触发403.

使用jQuery 2.x,可以使用事件loaderror。如果是403,则会触发错误事件,但是没有关于实际错误(或HTML响应代码)的信息,因此jQuery会执行以下操作。

.on( 
    "load error",
    callback = function( evt ) {
    script.remove();
    callback = null;
    if ( evt ) {
        complete( evt.type === "error" ? 404 : 200, evt.type );
        }
    }
);