我有一个Javascript函数,我从服务器通过JSONP获取数据。我试图模拟服务器错误或缺乏互联网访问(它应该在一个cordova应用程序中运行,所以它可能是客户端无法访问互联网),但我无法抓住错误。这是我的代码:
var completed = false;
jQuery.ajax({
url: "http://www.someDomainThatDoesn'tWork.com/getsContent.php?callback=?",
dataType: "json",
success: function(data) {
completed = true
console.log(data);
},
error: function() {
console.log("fail");
},
statusCode: {
404: function() {
console.log("fail 2");
}
}
}).fail(function() {
console.log("fail 3");
}).always(function() {
if (!completed) {
console.log("fail 4");
}
});
正如您所看到的,我尝试在四个地方捕捉(不同)错误。但是,如果我将url编辑为不存在的url,那么javascript就会中止并给我错误
无法加载资源:服务器响应状态为404(未找到)
并且没有错误捕获器被执行。
在jQuery.ajax()的文档中,它说
注意:不会为跨域脚本和跨域JSONP请求调用此处理程序。 所以我想我不应该感到惊讶。
有没有办法捕获此错误?我也试图用
来接受它try{} catch(error) {}
但是,这也没有做到。
答案 0 :(得分:0)
因为JSONP方法返回一个脚本,它可能会以静默方式失败,您可能需要更改服务器以使用CORS而不使用JSONP才能获得正确的错误处理。