封装2个ajax函数
来源:51js 时间:2010-09-03 18:14:00
听说最近流行JQ风格的语法,不流行EXT风格了
一.
//ajax类
fw=window.fw||{};
fw.ajax = {
init : function (url, method){
this.url = url;
this.arg = null;
this.json = {};
this.method = method || "get";
return this;
},
//获取表单的值作为参数
setForm : function(form){
this.json = fw.getForm(form);
return this;
},
//直接赋值参数
setArg : function(o){
var a = [];
o = fw.merge(this.json, o);
for(var i in o){
a.push(i+"="+o[i]);
}
if(a.length>0){
a = a.join("&");
this.method=="get" ? this.url+="?"+a : this.arg=a;
}
return this;
},
//回调
callback : function(cb,tp){
var x = fw.xmlhttp();
x.open(this.method, this.url, true);
x.onreadystatechange = function(){
if(cb&&x.readyState==4&&(x.status==0||x.status==200)){
var v = x.responseText;
if(tp=="json") v = fw.parse(v);
cb(v);
}
}
x.send(this.arg);
}
}
//demo: fw.ajax.init("data/ajax.php","post").setForm("ajax_form").setArg({act:"show"}).callback(showResult,"json");
2.
function Ajax (Args){
var Args = Args || {}, XHR = (function() {
try {return new XMLHttpRequest();}catch(e){};
try {return new ActiveXObject('Msxml2.XMLHTTP');}catch(e){};
try {return new ActiveXObject('Microsoft.XMLHTTP');}catch(e){};
})();
var Data = !!Args.Data && (function() {
var tempArr = [];
for(var i in Args.Data) tempArr.push(i + '=' + Args.Data[i]);
return tempArr.join('&');
})();
XHR.open(Args.Method || 'GET', (Args.Url || document.URL) + (Data ? '?' + Data : ''), !!Args.CallBack);
!!Args.CallBack && (XHR.onreadystatechange = function(){
(XHR.readyState == 4 && XHR.status == 200) ? Args.CallBack.True.call(XHR) :
Args.CallBack.False && Args.CallBack.False.call(XHR.readyState < 4 ? XHR.readyState : XHR.status);
});
!!Args.Method && XHR.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=' + Args.CharSet || 'utf-8');
XHR.send(Data || null);
return XHR;
};
//调用说明:
Ajax({
Url : 'archiver/', //访问地址,选填,默认为当前页
Data : { //提交的数据列表,如果要将url后面的get参数写在这里,那么url请不要带参数,选填
wd : '51js'
},
Method : 'get', //模式,选填,默认为get
CharSet : 'gbk', //编码,选填,默认为utf-8
CallBack : { //回调函数,选填,为空表示整个过程为同步执行
True : function(){ //成功调用的函数,选填,函数自动替换this对象为XMLHTTPRequest对象
alert(this.responseText);
},
False : function(){ //加载或失败调用的函数,选填,函数自动替换this对象为readyState(加载中)或status(加载失败)
alert(this);
}
}
});
//同步get
//调用方法:alert(Ajax({Url : 'https://www.aspxhome.com/'}).responseText);