JS XMLHttpRequest入門教程
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
在 Javascript 中,XMLHttpRequest 是客戶端的一個 API,它為瀏覽器與服務器通信提供了一個便捷通道。現代瀏覽器都支持 XMLHttpRequest API,如 IE 7+、Firefox、Chrome、Safari 和 Opera。創建 XMLHttpRequest 對象XMLHttpRequest 用于在后臺與服務器交換數據。創建 XMLHttpRequest 對象的方法如下:var xhr = new XMLHttpRequest (); IE 5.0 版本開始以 ActiveX 組件形式支持 XMLHttpRequest,IE 7.0 版本開始標準化 XMLHttpRequest。不過所有瀏覽器實現的 XMLHttpRequest 對象都提供相同的接口和用法。 示例下面示例使用工廠模式把定義 XMLHttpRequest 對象進行封裝,這樣只需要調用 creatXHR() 方法就可以返回一個 XMLHttpRequest 對象。 //創建XMLHttpRequest 對象 //參數:無 //返回值:XMLHttpRequest 對象 function createXHR () { var XHR = [ //兼容不同瀏覽器和版本得創建函數數組 function () { return new XMLHttpRequest () }, function () { return new ActiveXObject ("Msxml2.XMLHTTP") }, function () { return new ActiveXObject ("Msxml3.XMLHTTP") }, function () { return new ActiveXObject ("Microsoft.XMLHTTP") } ]; var xhr = null; //嘗試調用函數,如果成功則返回XMLHttpRequest對象,否則繼續嘗試 for (var i = 0; i < XHR.length; i ++) { try { xhr = XHR[i](); } catch(e) { continue //如果發生異常,則繼續下一個函數調用 } break; //如果成功,則中止循環 } return xhr; //返回對象實例 } 建立連接在 Javascript 中,使用 XMLHttpRequest 對象的 open() 方法可以建立一個 HTTP 請求。用法如下:xhr.open(method, url, async, username, password); 其中 xhr 表示 XMLHttpRequest 對象,open() 方法包含 5 個參數,說明如下:
建立連接后,可以使用 send() 方法發送請求。用法如下: xhr.send(body); 參數 body 表示將通過該請求發送的數據,如果不傳遞信息,可以設置為 null 或者省略。發送請求后,可以使用 XMLHttpRequest 對象的 responseBody、responseStream、responseText 或 responseXML 屬等待接收響應數據。 示例下面示例簡單演示了如何實現異步通信的方法。 var xhr = creatXHR(); //實例化XMLHttpRequest 對象 xhr.open ("GET", "server.txt", false"); //建立連接xhr.send(null); //發送請求 console.log(xhr.responseText); //接收數據 Hello World //服務器端腳本 發送 GET 請求在 Javascript 中,發送 GET 請求簡單、方便,適用于簡單字符串,不適用于大容量或加密數據。實現方法:將包含查詢字符串的 URL 傳入 open() 方法,設置第 1 個參數值為 GET 即可。服務器能夠通過查詢字符串接收用戶信息。示例下面示例以 GET 方式向服務器傳遞一條信息 callback=functionName。 <input name="submit" type="button" id="submit" value="向服務器發出請求" /> <script> window.onload = function () { //頁面初始化 var b = document.getElementsByTagName("input")[0]; b.onclick = function () { var url = "server.php?callback=functionName"; //設置查詢字符串 var xhr = createXHR(); //實例化XMLHttpRequest 對象 xhr.open("GET", url, false); //建立連接,要求同步響應 xhr.send(null); //發送請求 console.log(xhr.responseText); //接收數據 } } </script> <?php echo $_GET["callback"]; ?> 查詢字符串通過問號 ? 作為前綴附加在 URL 的末尾,發送數據是以連字符& 連接的一個或多個名值對。發送 POST 請求在 Javascript 中,POST 請求允許發送任意類型、長度的數據,多用于表單提交,以 send() 方法進行傳遞,而不以查詢字符串的方式進行傳遞。POST 字符串與 GET 字符串的格式相同。格式如下:send("name1=value1&name2=value2..."); 示例使用 POST 方法向服務器傳遞數據。 window.onload = function () { //頁面初始化 var b = document.getElementsByTagName("input")[0]; b.onclick = function () { var url = "server.php"; //設置請求的地址 var xhr = createXHR(); //實例化XMLHttpRequest 對象 xhr.open("POST", url, false); //建立連接,要求同步響應 xhr.setRequestHeader ('Content-type', 'application/x-www-form-urlencoded'); //設置為表單方式提交 xhr.send("callback=functionName"); //發送請求 console.log(xhr.responseText); //接收數據 } } 在服務器端設計接收 POST 方式傳遞的數據,并進行響應。 <?php echo $_POST["callback"]; ?> 異步響應狀態在 Javascript 中,使用 readyState 屬性可以實時跟蹤異步響應狀態。當該屬性值發生變化時,會觸發 readystatechange 事件,調用綁定的回調函數。readyState 屬性值說明如表所示。
考慮到各種特殊情況,更安全的方法是同時監測 HTTP 狀態碼,只有當 HTTP 狀態碼為 200 時,才說明 HTTP 響應順利完成。 示例下面示例中,修改請求為異步響應請求,然后通過 status 屬性獲取當前的 HTTP 狀態碼。如果 readyState 屬性值為 4,且 status(狀態碼)屬性值為 200,則說明 HTTP 請求和響應過程順利完成,這時可以安全、異步的讀取數據。 window.onload = function () { //頁面初始化 var b = document.getElementsByTagName("input")[0]; b.onclick = function () { var url = "server.php"; //設置請求的地址 var xhr = createXHR(); //實例化XMLHttpRequest對象 xhr.open("POST", url, true); //建立間接,要求異步響應 xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); //設置為表單方式提交 xhr.onreadystatechange = function () { //綁定響應狀態事件監聽函數 if (xhr.readyState == 4) { //監聽readyState狀態 if (xhr.status == 200 || xhr.status == 0) { //監聽HTTP狀態碼 console.log(xhr.responseText); //接收數據 } } } xhr.send("callback=functionName"); //發送請求 } } 中止請求使用 abort() 方法可以中止正在進行的請求。用法如下:xhr.onreadystatechange = function () {}; //清理事件響應函數 在調用 abort() 方法前,應先清除 onreadystatechange 事件處理函數,因為 IE 和 Mozilla 在請求中止后也會激活這個事件處理函數。如果給 onreadystatechange 屬性設置為 null,則 IE 會發生異常,所以為它設置一個空函數。 獲取和設置頭部消息HTTP 請求和響應都包含一組頭部消息,獲取和設置頭部消息可以使用下面兩個方法。
示例下面示例將獲取 HTTP 響應的所有頭部消息。 var xhr = createXHR(); var url = "server.txt"; xhr.open("GET", url, true); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { console.log(xhr.getAllResponseHeaders()); } } xhr.send(null); console.log(xhr.getResponseHeader("Content-Type")); xhr.setResponseHeader("Header-name", "value"); xhr.setResponseHeader("Content-Type", "application/x-www-form-urlencoded"); http://c.biancheng.net/view/5995.html 該文章在 2023/5/11 11:08:34 編輯過 |
相關文章
正在查詢... |