为了添加一些基本的错误处理,我想重写一段代码,使用jQuery的$.getJSON从Flickr中提取一些照片。这样做的原因是$.getJSON不提供错误处理或超时
由于$.getJSON只是$.ajax的一个包装器,我决定重写这个东西并让它出其不意,它可以完美地工作
但现在乐趣开始了。当我故意导致404(通过更改URL)或导致网络超时(通过未连接到互联网络)时,根本不会触发错误事件。我不知道我做错了什么。非常感谢你的帮助
代码如下:
$(文档).ready(函数(){
//var jsonFeed=”http://api.flickr.com/services/feeds/photos_public.gne“;//正确的URL
var jsonFeed=”http://api.flickr.com/services/feeds/photos_public.gne_______“;//这应该抛出一个404
$.ajax({
url:jsonFeed,
数据:{“lang”:“en us”,
“格式”:“json”,
“标签”:“日落”
},
数据类型:“jsonp”,
jsonp:“jsoncallback”,
超时:5000,
成功:功能(数据、状态){
$.each(data.items,function(i,item){
$(“<;img>;”)attr(“src”,(item.media.m)。替换(“\u m.”,“\u s.”)
.attr(“alt”,项目名称)
.appendTo(“ul#flickr”)
.wrap(“<;li>;<;a href=\”+item.link+“\”>;<;/a>;<;/li>;”;
如果(i==9)返回false;
});
},
错误:函数(XHR、textStatus、errorshown){
警报(“错误:+textStatus”);
警报(“ERREUR:+errorwornd”);
}
});
});
我想补充一点,这个问题是在jQuery处于1.4.2版时提出的
jQuery1.5和更高版本更好地支持JSONP请求的错误处理。但是,您需要使用$.ajax方法,而不是$.getJSON。对我来说,这很有效:
var req=$.ajax({
url:url,
数据类型:“jsonp”,
超时:10000
});
请求成功(函数(){
log('Yes!Success!');
});
请求错误(函数(){
console.log('Oh noes!');
});
当10秒后没有成功的请求时,超时似乎起到了作用并调用错误处理程序
我也写了一篇关于这个主题的博客