在跨域请求上捕获JSONP错误
我在URL(不同的域)上使用jQuery.getJSON()
可能不存在。 有没有办法让我捕获错误“无法加载资源”? 似乎try / catch不起作用,因为这个调用的异步性质。
我也不能使用jQuery.ajax()
的“ error:
”。 从文献:
注意:不会为跨域脚本和JSONP请求调用此处理程序。
如果您知道从远程服务返回的成功结果的最坏情况延迟,则可以使用超时机制来确定是否存在错误。
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
这有效:
j.ajaxSetup({ "error":function(xhr, ajaxOptions, thrownError) { console.log(thrownError); }});
延迟对象(jQuery 1.5中的新function)听起来就像你正在寻找的那样:
在1.5版本中引入的jQuery.Deferred是一个可链接的实用程序对象,它可以将多个回调注册到回调队列,调用回调队列,并中继任何同步或异步函数的成功或失败状态。
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格式错误,则会触发error函数。 例如:
print '{xxx"a":"1"}';
你抱怨的是客户端错误,说你试图从服务器下载资源。
这是构建到浏览器中,它允许您的浏览器告诉客户端或开发人员从Internet下载资源失败。 这与JavaScript无关,并且是由浏览器捕获的HTTP引发的更低级错误。
如果你想要捕获它,你需要放弃第三方ajax库并在更低的层次上处理XMLHTTPRequest
对象,即便如此我怀疑你可以做任何事情。
基本上,当您看到此错误时,请找出您尝试获取的不存在或无法访问的对象。 然后停止访问它或使其可访问。