在跨域请求上捕获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对象,即便如此我怀疑你可以做任何事情。

基本上,当您看到此错误时,请找出您尝试获取的不存在或无法访问的对象。 然后停止访问它或使其可访问。