我需要使用AJAX
为我的脚本中的跨域域名检索HTML status code
。关于jqXHR
对象,我真正关心的是status
和statusText
键。它适用于任何类型的状态代码,但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);
}
});
此answer和设置async: false
无法正常工作,Google对此问题的帮助不大。
非常感谢任何帮助。
答案 0 :(得分:0)
选择jQuery 2.x时,会调用错误回调,但响应代码为404而不是实际的403。
内部jQuery使用<script />
元素进行跨域通话,它检查load
和readystatechange
事件,加载脚本失败时都不会触发403.
使用jQuery 2.x,可以使用事件load
和error
。如果是403,则会触发错误事件,但是没有关于实际错误(或HTML响应代码)的信息,因此jQuery会执行以下操作。
.on(
"load error",
callback = function( evt ) {
script.remove();
callback = null;
if ( evt ) {
complete( evt.type === "error" ? 404 : 200, evt.type );
}
}
);