也寫一個Ajax.Request類附代碼
更新時間:2007年08月13日 19:41:16 作者:
目的:因?yàn)閎log程序里的某些模塊需要用到ajax,直接使用prototype.js體積比較大(40多k),而且僅僅用到其中的ajax功能,因此為了減輕下載的負(fù)擔(dān),又不能改動已經(jīng)在prototype.js框架下寫好的代碼,只能是按照prototype的風(fēng)格,自己寫一個ajax類,達(dá)到零成本移植框架。
新的ajax類如下:
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);
};
這個類保存成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)格完全與原來相同!
目前這個新類只有兩個回調(diào)函數(shù):onComplete 與 onError,Ajax類也只有Request一個方法,畢竟現(xiàn)在blog程序還不需要這么多應(yīng)用嘛。parameters 屬性有個默認(rèn)值:{asynchronous:true,method:"GET",parameters:""},可以從中知道,如果調(diào)用時不傳入asynchronous、method、parameters三個參數(shù),那么類將使用默認(rèn)值。
新的ajax類如下:
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);
};
這個類保存成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)格完全與原來相同!
目前這個新類只有兩個回調(diào)函數(shù):onComplete 與 onError,Ajax類也只有Request一個方法,畢竟現(xiàn)在blog程序還不需要這么多應(yīng)用嘛。parameters 屬性有個默認(rèn)值:{asynchronous:true,method:"GET",parameters:""},可以從中知道,如果調(diào)用時不傳入asynchronous、method、parameters三個參數(shù),那么類將使用默認(rèn)值。
相關(guān)文章
解決ajax跨域請求數(shù)據(jù)cookie丟失問題
本文主要是從前端jquery和服務(wù)端php為例,分別使用實(shí)例解決ajax跨域請求數(shù)據(jù)cookie丟失問題,推薦給有相同需求的小伙伴們。2015-03-03
Ajax實(shí)現(xiàn)phpcms 點(diǎn)贊功能實(shí)例代碼
這篇文章主要介紹了Ajax實(shí)現(xiàn)phpcms 點(diǎn)贊功能實(shí)例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03
Ajax實(shí)現(xiàn)列表無限加載和二級下拉選項(xiàng)效果
這篇文章主要為大家詳細(xì)介紹了Ajax實(shí)現(xiàn)列表無限加載和二級下拉選項(xiàng)效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
HTTP狀態(tài)代碼及其定義解析 Ajax捕捉回調(diào)錯誤參考
當(dāng)用戶試圖通過 HTTP 訪問一臺正在運(yùn)行 Internet 信息服務(wù) (IIS) 的服務(wù)器上的內(nèi)容時,IIS 返回一個表示該請求的狀態(tài)的數(shù)字代碼。狀態(tài)代碼可以指明具體請求是否已成功,還可以揭示請求失敗的確切原因2013-11-11
js結(jié)合json實(shí)現(xiàn)ajax簡單實(shí)例
這篇文章主要為大家詳細(xì)介紹了js結(jié)合json實(shí)現(xiàn)ajax簡單實(shí)例的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05

