banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

使用Jquery原理實現一個簡單的Ajax的支持JS類

詳細 Ajax 技術對於一個 Web 開發者來說應該是很熟悉的東西了,Ajax 的出現讓 web 頁面交互有了革命化的變化。對於 Ajax 來說,JQuery 是一個不可多得的好 JS 庫,但是很多朋友並不了解 Jquery 對 Ajax 的實現過程,或者說不太了解,這點 CG 在此是不提倡的,CG 寫下面代碼一方面是為了解決一位網友的疑問,同時也希望那些如果想在 Jquery 技術上有深入提高的朋友能夠多看看 Jquery 源代碼。

下面是簡單實現的一個 Ajax 支持類,有不明白的話可以發起提問和留言。

/**
* 名稱:Ajax 支持 javascript 類
* 功能:用於對頁面實現 Ajax 支持,簡單封裝 Ajax 請求
* 創建時間:2010-01-14
* 作者:CG
*/
// 以下為通用函數或對象
// 是否是 IE
var isIE = (document.all) ? true : false;

//$ id 選擇器
var $ = function(id) {
return "string" == typeof id ? document.getElementById(id) : id;
};
//Class 類對象
var Class = {
create: function() {
return function() { this.initialize.apply(this, arguments); }
}
};
// 事件函數綁定
var Bind = function(object, fun) {
return function() {
return fun.apply(object, arguments);
}
};

// 全局 Ajax 對象
// 用於 AjaxSupport 對象調用
var $ajax = function(obj){
// 錯誤信息
if(undefined == obj.error){
obj.error = ajaxError;
}
// 創建新的對象,此處可以使用單例來實現,減少資源消耗
new AjaxSupport(obj);
};

// 通用 Ajax 錯誤顯示
function ajaxError(msg){
alert(msg);
}

var AjaxSupport = Class.create();
AjaxSupport.prototype ={
/** 初始化方法
* 參數: obj 調用對象
*/
initialize: function(obj){
this._xmlHttp = null;
//URL 對象
this._url = obj.url;
// 請求方法對象
this._method = obj.method;
// 請求方式
this._asyn= obj.asyn;
// 請求數據
this._data= obj.data;
// 請求成功
this._success = obj.success;
// 錯誤
this._error = obj.error;
// 初始化 HttpRequest
this._initHttpRequest();
// 開始請求
this._ajaxRequest();
},
// 請求狀態變化
_readyStateChange: function() {
// 只判斷是 4 的情況,其他情需要另行設置
if(4 == this._xmlHttp.readyState){
// 請求成功
if(200 == this._xmlHttp.status){
if(undefined != this._success){
// 將請求發送給調用者
this._success(this._xmlHttp.responseXML);
}
}
// 錯誤,或返回結果非 200
else{
if(undefined != this._error){
this._error("Error Internal Error!");
}
}
}
},

//開始Ajax請求
\_ajaxRequest: function() {
    //打開請求
    try{
        //打開請求
        this.\_xmlHttp.open(this.\_method , this.\_url ,this.\_asyn);
    }catch(e){
        //打開請求錯誤
        if(undefined != this.\_error){
            this.\_error("Error:Openning Ajax Request Error!");
        }
    }
    try{
        //發送請求
        this.\_xmlHttp.send(this.\_data);
    }
    catch(e){
        //發送數據錯誤
        if(undefined != this.\_error){
            this.\_error("Error:Sending Ajax Request Error!");
        }
    }
},

//初始化HttpRequest對象
\_initHttpRequest: function(){
    //初始化HTTPReqest
    if(!isIE){//FF opera safari
        this.\_xmlHttp = new XMLHttpRequest();
    }else{//IE
        try{//IE6+
            this.\_xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e){
            try{//IE5.5+
                this.\_xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }catch(e){
                //瀏覽器不支持
                if(undefined != this.\_error){
                    this.\_error("Sorry! Your Browser dose not Support Ajax!");
                }
            }
        }
    }
    //事件綁定
    if(null != this.\_xmlHttp) {
        //綁定狀態改變事件
        this.\_xmlHttp.onreadystatechange = Bind(this, this.\_readyStateChange);
    }else{
        //綁定事件調用錯誤信息
        if(undefined != this.\_error){
            this.\_error("Error: init Ajax Object Error!");
        }
    }
}

}

以下是簡單的調用代碼,相信用過 Jquery 的朋友覺得很類似吧?

function testAjax() {
var req = "text=" + $("txtName").value;
// 對象調用 Ajax 測試
$ajax({
url:"AjaxTest",
method:"post",
asyn,
data,
success: function(obj){
// 這裡測試輸出數據,不作 XML 解析
$("msg").innerHTML = obj;
},
error: function(msg){
// 錯誤信息顯示
$("msg").innerHTML = msg;
}
});
}

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。