Ajax實現異步請求


基本步驟:創建XMLHttpRequest對象-->配置發送參數-->執行發送-->處理響應

ajax 通俗講有四個步驟

1.創建Ajax對象
2.鏈接到服務器
3.發送請求
4.接受返回值

1.創建對象
  var xhr = null;
    if(window.XMLHttpRequest){
        標准瀏覽器
        xhr = new XMLHttpRequest();
    }else{
        非標准瀏覽器IE6/7/8
        xhr = new ActiveXObject('Microsoft.XMLHTTP');
    }

對於前面要在if中加window判斷是因為,瀏覽器會對未定義值的變量讀取時報錯 ,而對於window.variable不會報錯,而是報undefined.

2.連接服務器

首先理解同步與異步
同步:事情一件一件來
異步:多件事情一起做
而ajax就是為了異步而生的,例如用戶請求表單后,提交到服務器的過程,用戶不用等待,可以干別的事情。。。。。。

   var type = 'get';
    var myurl = './data.php';
    var async = false;//第三個參數默認值就是true,表示異步;false表示同步
    xhr.open(type,myurl,async);
3發送請求
//發送請求
 var param = null;
  xhr.send(param);
4.接受請求

主要是判斷瀏覽器和服務器的交互進度和結果

        xhr.onreadystatechange=function(){
            //oAjax.readyState瀏覽器和服務器的交互情況
            if(oAjax.readyState == 4)//讀取完成
            {
                if(oAjax.status==200)//http狀態碼,用來判斷是否成功接受並返回文件
                {
                    alert(oAjax.status+" Success" +oAjax.responseText);//讀取響應文件里面的TEXT
                }else{
                    alert(oAjax.status+" NotFound");
                }
            }
        };

A、處理響應中的status (xhr.status == 200 ):

xhr.status是http協議的狀態碼:200成功、404沒有找到資源、500服務器報錯

ajax清除緩存:

    //將文件名設置隨系統時間改變而改變,這樣可以避免瀏覽器緩存舊數據
    oAjax.open('GET','./a.txt?t='+new Date().getTime(),true);

B、XMLHttpRequest取得響應:

(1)responseText:獲得字符串形式的響應數據

(2)responseXML:獲得xml形式的響應數據

(3)status和statusText:以數字和文本形式返回Http轉態碼

(4)getAllResponseHeader():獲得所以得響應報頭

(5)getResponseHeader():查詢響應中的某個字段的值

(6)readState屬性

"0"請求未初始化,open還未調用

"1":服務器連接已經建立,open已調用

"2":請求已接收,也就是接收到頭信息了

"3":請求處理中,也就是接收到響應主體了

"4":請求已經完成,且響應就緒,響應完成了

C、注意事項:

    1、xhr的對象創建需要兼容處理
    2、xhr.open的3個參數的作用
    3、xhr.readyState狀態值要了解
    4、通過xhr.responseText獲取服務器響應的數據
    5、對於get請求來說,xhr.send()的參數固定寫成null
    6、xhr.status和xhr.readyState的作用和區別

D、阻止表單提交的幾種方式:

 1.return false;
 2.e.preventDefault();
 3. <input type="submit" value="提交" id="btn">把“submit”換成“button”

E、Ajax-get提交:

Aja的get提交數據是通過url傳遞參數,並且需要對參數進行編碼處理
xhr.send();方法參數固定為null
2.配置發送函數
            encodeURI作用對get參數進行編碼處理,防止亂碼
            var param = encodeURI('?username='+uname+'&password='+pw);
            xhr.open('get','./data.php'+param);
3.發送
            xhr.send(null);

F、Ajax-post提交:

Ajax的post提交方式通過xhr.send();
函數傳遞的參數發送數據,而不是通過url傳遞數據
post提交方式必須設置請求頭
post提交的數據不需要進行編碼處理
2.配置發送函數
               xhr.open('post','./33data.php');
               //設置請求頭信息(對於post提交必須設置請求頭)
               xhr.setRequestHeader('Content-Type','application/x-www-form-urlencode');
3.發送
               var param = 'username='+uname+'&password='+pw;
               xhr.send(param);

G、post和get的區別:

get post
2.配置發送函數
            encodeURI作用對get參數進行編碼處理,防止亂碼
            var param = encodeURI('?username='+uname+'&password='+pw);
            xhr.open('get','./data.php'+param);
3.發送
            xhr.send(null);
2.配置發送函數
               xhr.open('post','./33data.php');
              設置請求頭信息(對於post提交必須設置請求頭)
               xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
3.發送
               var param = 'username='+uname+'&password='+pw;
               xhr.send(param);
 
1、Aja的get提交數據是通過url傳遞參數,並且需要對參數進行編碼處理
2、xhr.send();方法參數固定為null
1、Ajax的post提交方式通過xhr.send();
函數傳遞的參數發送數據,而不是通過url傳遞數據
2、post提交方式必須設置請求頭(   xhr.setRequestHeader('Content-Type','application/x-www-form-urlencode'); )
3、post提交的數據不需要進行編碼處理

 

H、HTTP請求:是一種規則,無狀態,無記憶:

  HTTP請求過程

(1)建立TCP連接

(2)web瀏覽器向web服務器發送請求指令

(3)web瀏覽器發送請求頭信息

(4)web服務器應答

(5)web服務器發送應答頭信息

(6)web服務器向瀏覽器發送數據

(7)web服務器關閉TCP連接

 

I、HTTP請求的4個·組成部分:

    a、HTTP請求方法或者動作(GET/POST)

     b、正在請求的URL

     c、請求頭,包含客戶環境信息、身份信息等

     d、請求體(正文),包含客戶提交的查詢字符串信息、表單信息

 

J、POST和GET方法:

     GET:(1)用於信息獲取

               (2)使用URL傳遞參數

                (3)String<=2000個字符左右

     POST:(1)用於修改服務器上的資源

                 (2)String<=無窮大

 

K、一個HTTP響應由三個部分組成:

       a、一個數字和文字組成的轉態碼。作用:顯示請求是否成功

       b、響應頭,包含服務器類型、日期、內容類型、長度等

       c、響應體,即響應正文,字符串、HTML等

 

L、HTTP狀態碼由3個數字構成,其中首位數字定義了狀態碼的類型:

    1^^:信息類,表示收到web請求,正在進行處理中

    2^^:成功,表示用戶請求被正確接收、理解和處理,如200

    3^^:重定向,表示請求未成功,客戶必須采取動作

    4^^:客戶端錯誤,客戶提交的信息有誤,如400

    found:意味着請求中所引用的文檔不存在

    5^^:服務器錯誤(最難處理的問題),表示服務器不能完成請求處理,如500


免責聲明!

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



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