$.getJSON 的错误处理

PHPABC JQuery 5,975 次浏览 , 1条评论

$.getJSON是个好东西,其亮点在于可以跨域调用数据解 析数据简单,这让很多的jQueryer乐此不彼.

好了废话不多说,进入正文:

1.设置加载图片<div id=”loading”><img src=”m/loading.gif”/></div>

2.调用数据前

setTimeout(function(){
if($(#loading”).is(“:visible”)){
$(#loading”).empty().append(“<p>”+timeoutStr+”<br/><a href=’javascript:void(0)’ onclick=’getZhuiList()’><img src=’m/refresh.png’/>刷新</a></p>”);
return false;
}
},timeout)

3.载入数据后

$.getJSON(url, function(msg){
$(#loading”).hide();
..
})

原理:
在载入数据前加个标记,我这里用的是一个loading图片,其实也可以用变量来代替,然后执行$.getJSON,这里分两种情况:一种是加载成 功,正常执行$.getJSON里面的代码;第二个是加载失败,不返回任何信息。所以,我把设置loading图片隐藏的代码放在加载成功时执行。当加载 失败时,loading图片是不会被隐藏的(废话~)。后面的我们就可以做主了,任意设置一个超时时间,用settimeout来检查有没有执行隐藏 loading的代码,具体方式是:图片是否隐藏。若图片没有隐藏,OK,我们的目的达到了,可以给用户一个提示,比如重试啊之类的!
后话:>
$.getJSON很傻很天真,所以它忽略了错误,当你用它来获取一个404页面的时候,你会发现它不会返回信息(

其实经过测试发现,有返回值的

 var url="";
var x=$.getJSON(url, function(msg){
     alert(msg);
})
alert(x.readyState)

实验结果,在Safari下
当URL正常,载入数据也正常时,第一个alert出来的是Object,第二个不弹 出
当URL为404时,Firefox下,第一个alert不弹出,第二个alert弹 出1;IE下没弹出信息

待测试…

setTimeout(function(){if($(#loading”).is(“:visible”)){$(“#loading”).empty().append(“<p>”+timeoutStr+”<br/><a href=’javascript:void(0)’ onclick=’getZhuiList()’><img src=’m/refresh.png’/>刷新</a></p>”);return false;}},timeout)

一条评论

  1. it资讯 2014年11月12日 14:31 回复

    除了用getJSON返回值,还可以用try catch捕获异常的方法

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Go