锁定老帖子 主题:封装json ajax函数
精华帖 (0) :: 良好帖 (0) :: 新手帖 (10) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-18
我没怎么舍入研究过 js 不过 js应该不是多线程的吧~~。 异步倒是真的。
而且封装json 不如用rpc 封装的更彻底。 可以看看jsonrpc 或者 phprpc |
|
返回顶楼 | |
发表时间:2010-01-19
的确是很多此一举了
|
|
返回顶楼 | |
发表时间:2010-01-19
贴一段我自己写的代码
Ajax = {} Ajax.config = {} Ajax.error = [] var xmlHttpReq = null; Ajax.request = function(config) { if (config) { Ajax.config = config; createXmlHttp().onreadystatechange = function() { if (xmlHttpReq.readyState == 4) { var data = null; if (xmlHttpReq.status == 200 || xmlHttpReq.status == 0) { if (config.reader) { if (config.reader == "XMLReader" || config.reader == "xml") { data = XMLReader.eval(xmlHttpReq.responseXML); } else if (config.reader == "JSONReader" || config.reader == "json") { data = JSONReader.eval(xmlHttpReq.responseText); } else if (config.reader == "text" || config.reader == "txt") { data = xmlHttpReq.responseText; } else { data = xmlHttpReq.responseText; } } else { data = xmlHttpReq.responseText; } config.success(data); } else { if (config.failure) { config.failure(data); } } } else { } }; xmlHttpReq.open(config.method, config.url, true); xmlHttpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); if (config.params) { xmlHttpReq.send(Util.encodeURI(config.params)); } else { xmlHttpReq.send(null); } } else { Ajax.error.push({ message : "The request lack of config" }); alert(Ajax.error[0].message); } Ajax.config = {}; Ajax.error = []; } function createXmlHttp() { if (window.XMLHttpRequest) { xmlHttpReq = new XMLHttpRequest(); if (xmlHttpReq.overrideMimeType) { xmlHttpReq.overrideMimeType("text/xml"); } } else { if (window.ActiveXObject) { var activexVersion = ["MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]; for (var i = 0; i < activexVersion.length; i++) { try { xmlHttpReq = new ActiveXObject(activexVersion[i]); } catch (e) { } } } } return xmlHttpReq; } XMLReader = {} XMLReader.eval = function(data) { return data; } JSONReader = {} JSONReader.eval = function(data) { return eval('(' + data + ')'); } JSON = {} JSON.parse = function(data) { return eval('(' + data + ')'); } JSON.escape = function(obj) { if (Util.isObject(obj)) { for (p in obj) { } } } Util = {} Util.encodeURI = function(param) { if (param) { var result = "&"; if (Util.isObject(param)) { for (o in param) { result += "" + o.toString() + "=" + param[o].toString() + "&"; } 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){ } }); |
|
返回顶楼 | |
发表时间:2010-01-19
delino 写道 的确是很多此一举了
呵呵,你不觉得每次调用ajax都要把全套的都写一遍很麻烦吗。 |
|
返回顶楼 | |
发表时间:2010-01-19
joehe 写道 这种东东直接用库就好了,自己真没必要再去写
还请教用jquery的哪个方法啊 |
|
返回顶楼 | |
发表时间:2010-01-19
sunhj000java 写道 虽然在封装ajax方法过程中遇见了些许困难,浪费了一些时间,但是还是挺值的。明白了两点: 第一, js是支持多线程的。 第二, ajax是多线程实现的,不能等待它的返回值(让主线程sleep也不太好),因为它不一定什么时候执行。 这位J友,你的结论没有反映实践的本质。 第一,js是单线程的(javascript语言本身特性是单线程的) 第二,ajax是由包括js参与进来的一种访问过程。可以异步也可同步。和通常说的多线程是有区别的。 |
|
返回顶楼 | |
发表时间:2010-01-19
jquery本身不就有$.get,$.post,$.getJson么。。。
|
|
返回顶楼 | |
发表时间:2010-01-19
人们常常说不要重新发明车轮,可是在没有车轮之前,我们不得不靠双脚来行走,发明轮子有它的价值和乐趣,如果我们一味的只懂得使用,而不了解真正的内幕是什么,我们又怎么能去创新呢?
|
|
返回顶楼 | |
发表时间:2010-01-19
最后修改:2010-01-19
mp_juan 写道
人们常常说不要重新发明车轮,可是在没有车轮之前,我们不得不靠双脚来行走,发明轮子有它的价值和乐趣,如果我们一味的只懂得使用,而不了解真正的内幕是什么,我们又怎么能去创新呢?
同意这种说法,我们如果不去了解内核不去试验,那我们的轮子很难从木轮子的变成轮胎,变成轮胎我们还是要去探索,为了让自己到达目的,适当探索和创新是必要的。 此外javascript是多线程的,具体哪里看到的忘了 |
|
返回顶楼 | |
发表时间:2010-01-19
一个东西不一定要能使用,不一定要很完美!
重要的是这个东西从没有到有了的一个过程会让我们不断的进步! |
|
返回顶楼 | |