我在可能不存在的网址(不同的域)上使用jQuery.getJSON()
。有没有办法让我捕获错误“无法加载资源”?由于此调用的异步性,似乎try / catch不起作用。
我也不能使用jQuery.ajax()
的“error:
”。来自文件:
注意:不会为跨域脚本和JSONP请求调用此处理程序。
答案 0 :(得分:11)
如果您知道从远程服务返回的成功结果的最坏情况延迟,您可以使用超时机制来确定是否存在错误。
var cbSuccess = false;
$.ajax({
url: 'http://example.com/.../service.php?callback=?',
type: 'get',
dataType: 'json',
success: function(data) {
cbSuccess = true;
}
});
setTimeout(function(){
if(!cbSuccess) { alert("failed"); }
}, 2000); // assuming 2sec is the max wait time for results
答案 1 :(得分:1)
这有效:
j.ajaxSetup({
"error":function(xhr, ajaxOptions, thrownError) {
console.log(thrownError);
}});
答案 2 :(得分:-2)
延迟对象(jQuery 1.5中的新功能)听起来就像你正在寻找的那样:
jQuery.Deferred,在1.5版本中引入,是一个可链接的实用程序对象,可以将多个回调注册到回调队列,调用回调队列,并中继任何同步或异步函数的成功或失败状态。
http://api.jquery.com/category/deferred-object/
修改强>
以下代码适用于我:
function jsonError(){
$("#test").text("error");
}
$.getJSON("json.php",function(data){
$("#test").text(data.a);
}).fail(jsonError);
json.php看起来像这样:
print '{"a":"1"}';
如果json.php的路径不正确或者JSON格式错误,则会触发错误函数。例如:
print '{xxx"a":"1"}';
答案 3 :(得分:-6)
您抱怨的是客户端错误,说您尝试从服务器下载资源。
这是构建到浏览器中,它允许您的浏览器告诉客户端或开发人员从Internet下载资源失败。这与JavaScript无关,并且是由浏览器捕获的HTTP引发的更低级错误。
如果你想要抓住它,你需要放弃第三方ajax库并在更低的层次上处理XMLHTTPRequest
对象,即使那时我也怀疑你能做些什么。
基本上,当您看到此错误时,请找出您尝试获取的不存在或无法访问的对象。然后停止访问它或使其可访问。