《JavaScript權威指南》學習筆記之二十---XMLHttpRequest和AJAX解決方式

來源:互聯網
上載者:User

標籤:權威指南   headers   safari   and   center   math   屬性   XML   頁面   

一、AJAX概述

        AJAX是Asynchronous JavaScript and XML的縮寫。中文譯作非同步JavaScript和XML。AJAX 不是新的程式設計語言,而是一種使用現有標準的新方法。在不又一次載入頁面的情況下,與server交換資料並更新部分網頁的藝術。

其核心是:client的Javascript可以與webserver進行非同步資料交換。


二、AJAX基礎---XMLHttpRequest對象

       全部現代瀏覽器(IE7+、Firefox、Chrome、Safari 以及 Opera)均內建 XMLHttpRequest 對象(IE5 和 IE6 使用 ActiveXObject)。XMLHttpRequest 用於在後台與server交換資料。這意味著能夠在不又一次載入整個網頁的情況下,對網頁的某部分進行更新。


        1、建立 XMLHttpRequest 對象的文法:

              var obj1 = new XMLHttpRequest();。

              IE5和IE6中。使用ActiveX對象:var obj2 = new ActiveXObject("Micorosoft.XMLHTTP");

              能夠用例如以下方式保持相容:

var xmlhttp;if (window.XMLHttpRequest)  {// code for IE7+, Firefox, Chrome, Opera, Safari  xmlhttp=new XMLHttpRequest();  }else  {// code for IE6, IE5  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");  }

       2、XMLHttpRequest 對象的方法和屬性

       XMLHttpRequest 對象的方法和屬性用來向server發送請求和從server擷取響應。

             2.1    發送請求:open()和send()

                       open()方法用於建立一個請求。建立的HTTP請求並未發送,直到調用send()方法才被發送

                        method不區分大寫和小寫。URL能夠是絕對或者相對位址。async默覺得true,意味著並不會馬上返回資料。string參數可選,用於定義發送請求的本文(最好用字串格式,而且使用setRequestHeader()方法定義請求前序的內容內型及編碼方式)。


              2.2    setRequestHeader():佈建要求前序,將和請求一同發送到服務端


 

//假設須要像 HTML 表單那樣 POST 資料,請使用 setRequestHeader() 來加入 HTTP 頭。//然後在 send() 方法中規定您希望發送的資料:xmlhttp.open("POST","ajax_test.asp",true);xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");xmlhttp.send("fname=Bill&lname=Gates");

              2.3    abort():終止請求 。沒有參數。


三、AJAX擷取server響應

        利用XMLHttpRequest對象和屬性擷取server的響應,包含HTTP前序和響應的本文。

        1、xmlObj.getAllResponseHeaders():擷取全部響應的前序,以字串形式返回。每一個HTTP前序名稱和值用冒號分隔。如myheader:myvalue,並以\r\n結束。

       

         2、xmlObj.getResponseHeader(param):擷取響應中某個特定的欄位值。參數param是一個響應的HTPP欄位名。


         3、responseText和responseXML屬性

               均為僅僅讀屬性。用於返回server中響應的本文。

<span style="font-size:14px;">//responseText屬性document.getElementById("myDiv").innerHTML=xmlhttp.responseText;////responseXML屬性xmlDoc=xmlhttp.responseXML;txt="";x=xmlDoc.getElementsByTagName("ARTIST");for (i=0;i<x.length;i++)  {  txt=txt + x[i].childNodes[0].nodeValue + "<br />";  }document.getElementById("myDiv").innerHTML=txt;</span>


        4、status和statusText屬性

              均為僅僅讀屬性,用於推斷響應狀態。

status表示響應中的狀態代碼。如404,200等,statusText表示狀態文本資訊。如OK,Not Found。狀態代碼和文本資訊一一相應,常見例如以下:


                 點擊查看完整版。

這兩個屬性僅在send()方法發送資料並接收到server響應完成後才有效。


         5、readyState屬性

               該屬性工作表示HTTP請求的狀態代碼,僅僅讀,返回一個整數,其值和說明例如以下:

               0 描寫敘述一種"未初始化"狀態;此時,已經建立一個xmlhttprequest對象,可是還沒有初始化。 
         1 描寫敘述一種"發送"狀態;此時,代碼已經調用了xmlhttprequest open()方法而且xmlhttprequest已經準備好把一個請求發送到server。 
         2 描寫敘述一種"發送"狀態;此時,已經通過send()方法把一個請求發送到server端,可是還沒有收到一個響應。 
         3 描寫敘述一種"正在接收"狀態;此時,已經接收到http回應標頭部資訊,可是訊息體部分還沒有全然接收結束。

 
         4 描寫敘述一種"已載入"狀態;此時,響應已經被全然接收。


四、onreadystatechange 事件

    readyState 屬性存有 XMLHttpRequest 的狀態資訊。每當 readyState 改變時。就會觸發 onreadystatechange 事件。

onreadystatechange屬效能夠指定一個函數,當狀態改變就調用該函數。

函數常常與readyState/status/statusText屬性確定響應的詳細狀態

xmlhttp.onreadystatechange=function()  {  if (xmlhttp.readyState==4 && xmlhttp.status==200)    {    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;    }  }


五、解決請求被瀏覽器緩衝的問題

    在使用XMLHttpRequest時,要注意的一個問題是載入的內容可能被瀏覽器緩衝。能夠對URL參數作改動避免此問題。

經常用法是加上一個隨機數作為查詢參數。

<span style="color:#000000;">xmlhttp.open("GET","demo_get.asp?t=" + Math.random(),true);<span style="font-family:SimSun;">//或者:xmlhttp.open("get","url"+(new Date()).getTime(),true);</span> xmlhttp.send();</span>

六、點擊看執行個體

《JavaScript權威指南》學習筆記之二十---XMLHttpRequest和AJAX解決方式

相關文章

Alibaba Cloud 10 Year Anniversary

With You, We are Shaping a Digital World, 2009-2019

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。