也寫(xiě)一個(gè)Ajax.Request類(lèi)附代碼
更新時(shí)間:2007年08月13日 19:41:16 作者:
目的:因?yàn)閎log程序里的某些模塊需要用到ajax,直接使用prototype.js體積比較大(40多k),而且僅僅用到其中的ajax功能,因此為了減輕下載的負(fù)擔(dān),又不能改動(dòng)已經(jīng)在prototype.js框架下寫(xiě)好的代碼,只能是按照prototype的風(fēng)格,自己寫(xiě)一個(gè)ajax類(lèi),達(dá)到零成本移植框架。
新的ajax類(lèi)如下:
var Ajax = {xmlhttp:function(){
try{
return new ActiveXObject('Msxml2.XMLHTTP');
}catch(e){
try{
return new ActiveXObject('Microsoft.XMLHTTP');
}catch(e){
return new XMLHttpRequest();
}
}
}
};
Ajax.Request = function(){
if (arguments.length<2) return;
var _p = {asynchronous:true,method:"GET",parameters:""}; //default option
for (var key in arguments[1]){ // custom option overwrite default option
_p[key] = arguments[1][key];
}
var _x = Ajax.xmlhttp(); //xml obj
var _url = arguments[0]; //str
if(_p["parameters"].length>0) _p["parameters"] += '&_=';
if(_p["method"].toUpperCase()=="GET")_url += (_url.match(/\?/) ? '&' : '?') + _p["parameters"];
_x.open(_p["method"],_url,_p["asynchronous"]);
_x.onreadystatechange = function(){
if (_x.readyState==4){
if(_x.status==200){
_p["onComplete"]?_p["onComplete"](_x):"";
}else{
_p["onError"]?_p["onError"](_x):"";
}
}
}
if(_p["method"].toUpperCase()=="POST")_x.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
_x.send(_p["method"].toUpperCase()=="POST" ? _p["parameters"] : null);
};
這個(gè)類(lèi)保存成js文件,體積還不到1k,足夠小了。哈哈。
調(diào)用方法:
var myAjax = new Ajax.Request(
"http://localhost/abc.asp",
{
method:"post",
parameters:"demo=123456789abc",
onComplete:function(xmlhttp){
alert(xmlhttp.responseText)
}
}
);
調(diào)用的風(fēng)格完全與原來(lái)相同!
目前這個(gè)新類(lèi)只有兩個(gè)回調(diào)函數(shù):onComplete 與 onError,Ajax類(lèi)也只有Request一個(gè)方法,畢竟現(xiàn)在blog程序還不需要這么多應(yīng)用嘛。parameters 屬性有個(gè)默認(rèn)值:{asynchronous:true,method:"GET",parameters:""},可以從中知道,如果調(diào)用時(shí)不傳入asynchronous、method、parameters三個(gè)參數(shù),那么類(lèi)將使用默認(rèn)值。
新的ajax類(lèi)如下:
var Ajax = {xmlhttp:function(){
try{
return new ActiveXObject('Msxml2.XMLHTTP');
}catch(e){
try{
return new ActiveXObject('Microsoft.XMLHTTP');
}catch(e){
return new XMLHttpRequest();
}
}
}
};
Ajax.Request = function(){
if (arguments.length<2) return;
var _p = {asynchronous:true,method:"GET",parameters:""}; //default option
for (var key in arguments[1]){ // custom option overwrite default option
_p[key] = arguments[1][key];
}
var _x = Ajax.xmlhttp(); //xml obj
var _url = arguments[0]; //str
if(_p["parameters"].length>0) _p["parameters"] += '&_=';
if(_p["method"].toUpperCase()=="GET")_url += (_url.match(/\?/) ? '&' : '?') + _p["parameters"];
_x.open(_p["method"],_url,_p["asynchronous"]);
_x.onreadystatechange = function(){
if (_x.readyState==4){
if(_x.status==200){
_p["onComplete"]?_p["onComplete"](_x):"";
}else{
_p["onError"]?_p["onError"](_x):"";
}
}
}
if(_p["method"].toUpperCase()=="POST")_x.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
_x.send(_p["method"].toUpperCase()=="POST" ? _p["parameters"] : null);
};
這個(gè)類(lèi)保存成js文件,體積還不到1k,足夠小了。哈哈。
調(diào)用方法:
var myAjax = new Ajax.Request(
"http://localhost/abc.asp",
{
method:"post",
parameters:"demo=123456789abc",
onComplete:function(xmlhttp){
alert(xmlhttp.responseText)
}
}
);
調(diào)用的風(fēng)格完全與原來(lái)相同!
目前這個(gè)新類(lèi)只有兩個(gè)回調(diào)函數(shù):onComplete 與 onError,Ajax類(lèi)也只有Request一個(gè)方法,畢竟現(xiàn)在blog程序還不需要這么多應(yīng)用嘛。parameters 屬性有個(gè)默認(rèn)值:{asynchronous:true,method:"GET",parameters:""},可以從中知道,如果調(diào)用時(shí)不傳入asynchronous、method、parameters三個(gè)參數(shù),那么類(lèi)將使用默認(rèn)值。
相關(guān)文章
解決ajax跨域請(qǐng)求數(shù)據(jù)cookie丟失問(wèn)題
本文主要是從前端jquery和服務(wù)端php為例,分別使用實(shí)例解決ajax跨域請(qǐng)求數(shù)據(jù)cookie丟失問(wèn)題,推薦給有相同需求的小伙伴們。2015-03-03
Ajax實(shí)現(xiàn)phpcms 點(diǎn)贊功能實(shí)例代碼
這篇文章主要介紹了Ajax實(shí)現(xiàn)phpcms 點(diǎn)贊功能實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03
Ajax實(shí)現(xiàn)列表無(wú)限加載和二級(jí)下拉選項(xiàng)效果
這篇文章主要為大家詳細(xì)介紹了Ajax實(shí)現(xiàn)列表無(wú)限加載和二級(jí)下拉選項(xiàng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
Ajax使用異步對(duì)象發(fā)送請(qǐng)求方案詳解
Ajax的原理是通過(guò)XmlHttpRequest對(duì)象來(lái)向服務(wù)器發(fā)異步請(qǐng)求,從服務(wù)器獲得數(shù)據(jù),然后用JavaScript來(lái)操作DOM而更新頁(yè)面,這篇文章主要介紹了Ajax使用異步對(duì)象發(fā)送請(qǐng)求簡(jiǎn)介,需要的朋友可以參考下2024-04-04
HTTP狀態(tài)代碼及其定義解析 Ajax捕捉回調(diào)錯(cuò)誤參考
當(dāng)用戶(hù)試圖通過(guò) HTTP 訪問(wèn)一臺(tái)正在運(yùn)行 Internet 信息服務(wù) (IIS) 的服務(wù)器上的內(nèi)容時(shí),IIS 返回一個(gè)表示該請(qǐng)求的狀態(tài)的數(shù)字代碼。狀態(tài)代碼可以指明具體請(qǐng)求是否已成功,還可以揭示請(qǐng)求失敗的確切原因2013-11-11
js結(jié)合json實(shí)現(xiàn)ajax簡(jiǎn)單實(shí)例
這篇文章主要為大家詳細(xì)介紹了js結(jié)合json實(shí)現(xiàn)ajax簡(jiǎn)單實(shí)例的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
AJAX簡(jiǎn)歷系統(tǒng)附j(luò)s文件
AJAX簡(jiǎn)歷系統(tǒng)附j(luò)s文件...2007-08-08

