论坛首页 Web前端技术论坛

封装json ajax函数

浏览 11221 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (10) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-18  
我没怎么舍入研究过 js 不过 js应该不是多线程的吧~~。  异步倒是真的。

而且封装json 不如用rpc 封装的更彻底。 可以看看jsonrpc  或者 phprpc
0 请登录后投票
   发表时间:2010-01-19  
的确是很多此一举了
0 请登录后投票
   发表时间: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){

}

});
0 请登录后投票
   发表时间:2010-01-19  
delino 写道
的确是很多此一举了

呵呵,你不觉得每次调用ajax都要把全套的都写一遍很麻烦吗。
0 请登录后投票
   发表时间:2010-01-19  
joehe 写道
这种东东直接用库就好了,自己真没必要再去写

还请教用jquery的哪个方法啊
0 请登录后投票
   发表时间:2010-01-19  
sunhj000java 写道

虽然在封装ajax方法过程中遇见了些许困难,浪费了一些时间,但是还是挺值的。明白了两点:
第一, js是支持多线程的。
第二, ajax是多线程实现的,不能等待它的返回值(让主线程sleep也不太好),因为它不一定什么时候执行。


这位J友,你的结论没有反映实践的本质。
第一,js是单线程的(javascript语言本身特性是单线程的)
第二,ajax是由包括js参与进来的一种访问过程。可以异步也可同步。和通常说的多线程是有区别的。
0 请登录后投票
   发表时间:2010-01-19  
jquery本身不就有$.get,$.post,$.getJson么。。。
0 请登录后投票
   发表时间:2010-01-19  
人们常常说不要重新发明车轮,可是在没有车轮之前,我们不得不靠双脚来行走,发明轮子有它的价值和乐趣,如果我们一味的只懂得使用,而不了解真正的内幕是什么,我们又怎么能去创新呢?
0 请登录后投票
   发表时间:2010-01-19   最后修改:2010-01-19
mp_juan 写道
人们常常说不要重新发明车轮,可是在没有车轮之前,我们不得不靠双脚来行走,发明轮子有它的价值和乐趣,如果我们一味的只懂得使用,而不了解真正的内幕是什么,我们又怎么能去创新呢?


 同意这种说法,我们如果不去了解内核不去试验,那我们的轮子很难从木轮子的变成轮胎,变成轮胎我们还是要去探索,为了让自己到达目的,适当探索和创新是必要的。

此外javascript是多线程的,具体哪里看到的忘了

0 请登录后投票
   发表时间:2010-01-19  
一个东西不一定要能使用,不一定要很完美!
重要的是这个东西从没有到有了的一个过程会让我们不断的进步!
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics