Ajax基礎--JavaScript實現


ajax原理

1、ajax

即“Asynchronous JavaScript and XML”(異步 JavaScript 和 XML),也就是無刷新數據讀取。

通俗地講就是:AJAX 通過在后台與服務器交換少量數據的方式,允許在不重新加載整個頁面的情況下,對網頁的一部分內容進行數據更新。

2、http 請求

http(超文本傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議。

這里需要了解 http 請求的兩個方法:GET方法 和 POST方法。

①、GET 用於獲取數據。GET 是在 URL 中傳遞數據,它的安全性低,容量低。

②、POST 用於上傳數據。POST 安全性一般,容量幾乎無限。

 

PS:有興趣的同學可以參考Http協議詳解

3、XMLHttpRequest

XMLHttpRequest 是一個用於在后台與服務器交換數據的對象。目前幾乎所有瀏覽器支持該對象。

XMLHttpRequest是ajax技術的核心部分,在javascript中就是利用XMLHttpRequest對象來實現ajax功能,以便給用戶帶來好的體驗,其他的方法實現ajax功能也都是實現此功能。

XMLHttpRequest常用的方法、屬性:

①、open()方法:用於向服務器發送一個請求;該方法有3個參數,第一個參數表示發送請求的方式(即連接服務器的方式)即“GET”或“POST”,第二個參數表示要請求的URL地址,第三個參數表示是否以異步方式發出請求,若為true則表示是異步,否則為同步。

②、send()方法:發送請求。

③、onreadystatechange 事件:緊跟其后是一個函數名或是一個匿名函數,發送請求以后XMLHttpRequest對象一直處於等待狀態,直到服務器響應后激發 onreadystatechange事件,緊跟其后的方法就是當XMLHttpRequest對象的onreadystatechange事件激發之后 的客戶端方法。

④、readyState屬性:XMLHttpRequest對象的請求狀態,返回的是整數(0-4),具體意思如下:

0(未初始化):還沒有調用 open() 方法。

1(載入):已調用 send() 方法,正在發送請求。

2(載入完成):send() 方法完成,已收到全部響應內容。

3(解析):正在解析響應內容。

4(完成):響應內容解析完成,可以在客戶端調用。

 

⑤、status:請求結果,返回 200 或者 404。

200 => 成功。

404 => 失敗。

⑥、responseText:返回內容,即我們所需要讀取的數據。注意:responseText 返回的是字符串。

 

實現例子

1、創建 ajax 對象

在創建對象時,要考慮瀏覽器兼容性問題,即IE瀏覽器和非IE瀏覽器(如firefox、chrome等):

var ajaxObj=null;
if(window.XMLHttpRequest){
    ajaxObj = new XMLHttpRequest();//IE6以上及非IE瀏覽器
}else if(window.ActiveXObject){
    ajaxObj = new ActiveXObject('Microsoft.XMLHTTP');//IE6以下的IE瀏覽器
}else{
    throw new Error('no ajax object available.');
}

2、連接服務器

這里就用上面講到的open方法。

ajaxObj.open('GET',URL,true);

3、發送請求

ajaxObj.send();

4、接受數據

ajaxObj.onreadystatechange=function(){
    if(ajaxObj.readyState==4){
        if(ajaxObj.status==200){
            funSucc(ajaxObj.responseText);//funSucc是獲取成功時處理的函數
        }else{
            if(funFaild){
                funFaild();//funFaild是獲取失敗時處理的函數
            }
        }
    }
};

將以上代碼連起來:

function ajax(url, funSucc, funFaild){
    //1.創建ajax對象
    var ajaxObj = null;
    if(window.XMLHttpRequest){
        ajaxObj = new XMLHttpRequest();
    }else if(window.ActiveObject){
        ajaxObj = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
        throw new Error('no ajax object available.')
}
      
    //2.連接服務器  
    ajaxObj.open('GET', URL, true);//open(方法, url, 是否異步)
      
    //3.發送請求  
    ajaxObj.send();
      
    //4.接收返回
    ajaxObj.onreadystatechange = function(){  //OnReadyStateChange事件
        if(ajaxObj.readyState == 4){  //4為完成
            if(ajaxObj.status == 200){    //200為成功
                funSucc(ajaxObj.responseText) 
            }else{
                if(funFaild){
                    funFaild();
                }
            }
        }
    };
}

最后是一個簡單實例:

<!DOCTYPE HTML>
<html>
<head>
    <title>ajax基礎</title>
</head>
<body>
    點擊按鈕的時候,讀取abc.txt<input id="btn" type="button" value="讀取"/><br/>
    <div id="con"></div>
</body>
</html>
<script type="text/javascript" src="ajax.js"></script>
<script type="text/javascript">
window.onload = function(){
    var oBtn = document.getElementById('btn');
    var oCon = document.getElementById('con');
    oBtn.onclick = function(){
        ajax('abc.txt',function(str){
            oCon.innerHTML = str;
        });
    }
}
</script>

abc.txt 內容:

這是ajax調用的內容1。
這是ajax調用的內容2。
這是ajax調用的內容3。

總結:

利用純javascript實現ajax效果的主要步驟如下:

1、根據瀏覽器類型實例化XMLHttpRequest對象

2、利用XMLHttpRequest對象向服務器發出一個動態請求

3、編寫XMLHttpRequest對象接收服務器的響應時要執行客戶端代碼,在客戶端做一些設置來響應客戶端操作

4、編寫服務器方法,用於處理客戶端請求並作出響應。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM