封装json ajax函数前几天做项目多次用到了Ajax,有的时候一个js函数中要调用几次,每次都去写一大段麻烦的很
封装json ajax函数
前几天做项目多次用到了Ajax,有的时候一个js函数中要调用几次,每次都去写一大段麻烦的很,我就想为什么不去把Ajax调用的过程封装一下,把参数和链接传进去,然后把返回值传给调用函数来处理呢。想到我就去做了,写了这个个函数:
/** * ajax提交 * @param url * @param param * @param callback回调函数 * @return */function jsonAjax(url, param) {alert(url);$.ajax({ type:"POST", url:url, data:param, dataType:"json", success:function(html){return html;}, error:function(){return {result:”error”}; }});}测试:var html = jsonAjax(url, param); If(html.result == “success”)
…
可是我每次运行的时候都提示If(html.result == “success”)有错误,html为空,我单步跟踪了一下,jsonAjax方法也执行了。我就很郁闷,就请同事测试了一下。发现他那边一会行一会不行。
感觉单步跟踪不能真实的测试出到底发生了什么,然后我就用alert测试了一下。
/** * ajax提交 * @param url * @param param * @param callback回调函数 * @return */function jsonAjax(url, param) {alert(url);$.ajax({ type:"POST", url:url, data:param, dataType:"json", success:function(html){alert(html);return html;}, error:function(){return {result:”error”}; }});}测试:var html = jsonAjax(url, param);Alert(html); If(html.result == “success”)
再次运行先是alert了一个”undefined”,接着又alert了一个object
仔细想了一下ajax调用应该是浏览器又开的一个线程,所以在获得html的时候一会可以拿到,一会拿不到。
然后就把函数重新设计了一下:
/** * ajax提交 * @param url * @param param * @param callback回调函数 * @return */function jsonAjax(url, param, callback) {alert(url);$.ajax({ type:"POST", url:url, data:param, dataType:"json", success:callback, error:function(){jQuery.fn.mBox( {message :'恢复失败'}); }});}
顺利执行成功。
虽然在封装ajax方法过程中遇见了些许困难,浪费了一些时间,但是还是挺值的。明白了两点:
第一,js是支持多线程的。
第二,ajax是多线程实现的,不能等待它的返回值(让主线程sleep也不太好),因为它不一定什么时候执行。
}
result = result.substring(0, result.length - 1);
}
}
return result;
}
Util.isObject = function(data) {
return typeof(data) == "object";
}
调用的方法很简单,用过extjs的Ajax的同胞们肯定很熟悉这样的写法吧,添加了一个reader对象,我们可以返回为text的文本格式的数据,也可以返回json对象的数据,不过要在服务器端解析为正确的json字符串,浏览器才能正常解析
Ajax.request({
method:"post",
url:"test.do",
reader:"json",
params:{name:'hello'},
success:function(data){
},
failure:function(data){
}
}); 13 楼 sunhj000java 2010-01-19 delino 写道的确是很多此一举了
呵呵,你不觉得每次调用ajax都要把全套的都写一遍很麻烦吗。 14 楼 sunhj000java 2010-01-19 joehe 写道这种东东直接用库就好了,自己真没必要再去写
还请教用jquery的哪个方法啊 15 楼 sunnymoon 2010-01-19 sunhj000java 写道
虽然在封装ajax方法过程中遇见了些许困难,浪费了一些时间,但是还是挺值的。明白了两点:
第一,js是支持多线程的。
第二,ajax是多线程实现的,不能等待它的返回值(让主线程sleep也不太好),因为它不一定什么时候执行。
这位J友,你的结论没有反映实践的本质。
第一,js是单线程的(javascript语言本身特性是单线程的)
第二,ajax是由包括js参与进来的一种访问过程。可以异步也可同步。和通常说的多线程是有区别的。
16 楼 shadowlin 2010-01-19 jquery本身不就有$.get,$.post,$.getJson么。。。 17 楼 mp_juan 2010-01-19 人们常常说不要重新发明车轮,可是在没有车轮之前,我们不得不靠双脚来行走,发明轮子有它的价值和乐趣,如果我们一味的只懂得使用,而不了解真正的内幕是什么,我们又怎么能去创新呢? 18 楼 bluemusic 2010-01-19 <div class="quote_title">mp_juan 写道</div>
<div class="quote_div">人们常常说不要重新发明车轮,可是在没有车轮之前,我们不得不靠双脚来行走,发明轮子有它的价值和乐趣,如果我们一味的只懂得使用,而不了解真正的内幕是什么,我们又怎么能去创新呢?</div>
<p><br></p>
<p>?同意这种说法,我们如果不去了解内核不去试验,那我们的轮子很难从木轮子的变成轮胎,变成轮胎我们还是要去探索,为了让自己到达目的,适当探索和创新是必要的。</p>
<p>此外javascript是多线程的,具体哪里看到的忘了</p> 19 楼 java.wj 2010-01-19 一个东西不一定要能使用,不一定要很完美!
重要的是这个东西从没有到有了的一个过程会让我们不断的进步! 20 楼 風一樣的男子 2010-01-19 轮子,jQuery、mootools 都有封装好的 21 楼 shadowlin 2010-01-19 发明轮子没什么问题,你可以研究轮子是怎么发明的。但是用轮子发明轮子就有点。。。
既然用jquery了,就用内置的ajax函数不挺好的么 22 楼 anky_end 2010-01-20 楼主你搞错一件事情:
不是因为js是多线程,而是因为jquery ajax默认是异步提交
你设置为同步就可以顺序执行下去了 23 楼 anky_end 2010-01-20 shadowlin 写道发明轮子没什么问题,你可以研究轮子是怎么发明的。但是用轮子发明轮子就有点。。。
既然用jquery了,就用内置的ajax函数不挺好的么
楼主也是用jquery的ajax
其实再多封装一层也不错,算不上什么轮子。
俺当初也有楼主同样的困惑,想把callback值返回不成功。后来看了下源码明白了,nnd,是异步同步的问题啊 24 楼 JavaEye4Cwy 2010-01-20 jQuery值得赞一个~ 25 楼 java_fxj 2010-01-21 个人觉得用dhtmlx比较简单,
dhtmlxAjax.post(url, pars, callback_)。
直接这样就OK了。