ajax(1)

1.ajax 請求步驟

    (1)創(chuàng)建`XMLHttpRequest`對象,也就是創(chuàng)建一個異步調(diào)用對象.
      var xhr= new XMLHttpRequest();
     在IE瀏覽器中創(chuàng)建XMLHttpRequest對象的方式如下所示:
     var xhr = new ActiveXObject("Microsoft.XMLHTTP");

    (2)創(chuàng)建一個新的`HTTP`請求,并指定該`HTTP`請求的方法、`URL`及驗證信息.
      get請求
     var param = 'username' + uname + '&password' ;
     encodeURI()用來對中文參數(shù)進行編碼,防止亂碼
     xhr.open('get','./01check.php?'+encodeURI(param),true);
     參數(shù)1、請求方式(get獲取數(shù)據(jù),post提交數(shù)據(jù))
     參數(shù)2、請求地址(如果是get請求那么請求參數(shù)必須在url中傳遞)
     參數(shù)3、同步或者異步標(biāo)志位,默認(rèn)是true表示異步,false表示同步
     xhr.send(null);//get請求這里需要添加null參數(shù)
    
     post請求
     var param = 'password' ;
     xhr.open('post','./01check.php',true); //post請求,參數(shù)通過send傳遞,不需要通過encodeURI轉(zhuǎn)碼
     xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded);//post 要請求頭
     xhr.send(param); //post請求參數(shù)在這里傳遞,并且不需要轉(zhuǎn)碼

    (3)設(shè)置響應(yīng)`HTTP`請求狀態(tài)變化的函數(shù).
       xhr.onreadystatechange = function(){ //該函數(shù)調(diào)用的條件就是readyState狀態(tài)從2-4
       if(xhr.readyState == 4){ //表示服務(wù)器返回的數(shù)據(jù)已經(jīng)可以使用了,但是這個數(shù)據(jù)不一定是正確的
           if(xhr.status == 200){//表示服務(wù)器返回的數(shù)據(jù)是正常的,不是200表示數(shù)據(jù)是錯誤的
                var data = xhr.responseText;
                JSON.parse(data ); //可以將json字符串轉(zhuǎn)換成json對象 
               JSON.stringify(data ); //可以將json對象轉(zhuǎn)換成json對符串 
                var info = document.getElementById('info');
                if(data == '1'){
                    info.innerHTML = '登錄成功';
                }else if(data == '2'){
                    info.innerHTML = '用戶名或者密碼錯誤';
                }
            }
        }
    }

    (4)發(fā)送`HTTP`請求.

    (5)獲取異步調(diào)用返回的數(shù)據(jù).

    (6)使用JavaScript和DOM實現(xiàn)局部刷新.

2.什么是readyState
readyState是XMLHttpRequest對象的一個屬性,用來標(biāo)識當(dāng)前XMLHttpRequest對象處于什么狀態(tài)。
readyState總共有5個狀態(tài)值,分別為0~4,每個值代表了不同的含義
0:初始化,XMLHttpRequest對象還沒有完成初始化
1:載入,XMLHttpRequest對象開始發(fā)送請求
2:載入完成,XMLHttpRequest對象的請求發(fā)送完成
3:解析,XMLHttpRequest對象開始讀取服務(wù)器的響應(yīng)
4:完成,XMLHttpRequest對象讀取服務(wù)器響應(yīng)結(jié)束 

3.什么是status
status是XMLHttpRequest對象的一個屬性,表示響應(yīng)的HTTP狀態(tài)碼
在HTTP1.1協(xié)議下,HTTP狀態(tài)碼總共可分為5大類
1xx:信息響應(yīng)類,表示接收到請求并且繼續(xù)處理
2xx:處理成功響應(yīng)類,表示動作被成功接收、理解和接受
3xx:重定向響應(yīng)類,為了完成指定的動作,必須接受進一步處理 
4xx:客戶端錯誤,客戶請求包含語法錯誤或者是不能正確執(zhí)行
5xx:服務(wù)端錯誤,服務(wù)器不能正確執(zhí)行一個正確的請求

2.post 和 get的區(qū)別,什么時候用post,什么時候用get

get 存儲內(nèi)容小,不能超過2kb ;文件上傳只能用post
get 不安全,顯示在地址欄 ;post比較安全
get 效率高,因為post請求需要加密和解密的過程,get不需要
在做數(shù)據(jù)查詢時,建議用get方式;而在做數(shù)據(jù)添加,修改或刪除時,建議用post方式;

3、 Ajax的最大的特點是什么。

    Ajax可以實現(xiàn)異步通信效果,實現(xiàn)頁面局部刷新,帶來更好的用戶體驗;按需獲取數(shù)據(jù),節(jié)約帶寬資源; 

4、頁面編碼和被請求的資源編碼如果不一致如何處理?

對于ajax請求傳遞的參數(shù),如果是get請求方式,參數(shù)如果傳遞中文,在有些瀏覽器會亂碼,不同的瀏覽
器對參數(shù)編碼的處理方式不同,所以對于get請求的參數(shù)需要使用 encodeURI函數(shù)對參數(shù)進
行編碼處理,后臺開發(fā)語言都有相應(yīng)的解碼api。對于post請求不需要進行編碼
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,590評論 19 139
  • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,569評論 0 7
  • ajax不是新的編程語言,是一個現(xiàn)有的標(biāo)準(zhǔn)方法,ajax實現(xiàn)與服務(wù)器交換數(shù)據(jù)并且能夠在不重新加載整個頁面的情況下更...
    jslxm閱讀 196評論 0 0
  • 世俗中最關(guān)注的就是成功,但是成長卻是陪伴你最久的東西。 成長只是一個過程,可長可短,在于你目標(biāo)設(shè)立的大小,如果能尋...
    goen8715閱讀 803評論 0 0
  • 老朋友,算算我們認(rèn)識已經(jīng)將近十幾年了。十幾年年時光,一個小孩子都可以長為成人了!時光走的真快! 想想就覺得很恍惚。...
    silence2016330閱讀 424評論 0 1

友情鏈接更多精彩內(nèi)容