1. 程式人生 > 其它 >AJAX的非同步請求

AJAX的非同步請求

技術標籤:D_JavaWeb階段# D15_JavaWeb中的Ajax知識javaajax

1.非同步請求物件

在區域性重新整理,需要建立一個物件,代替瀏覽器發起請求的行為,這個物件存在記憶體中。代替瀏覽器發起請求並接收響應資料。這個物件叫做非同步請求物件
全域性重新整理是同步行為, 區域性重新整理是非同步行為[瀏覽器資料沒有全部更新] 這個非同步物件用於在後臺與伺服器交換資料。
XMLHttpRequest 就是我們說的非同步物件
XMLHttpRequest 物件能夠:

  • 在不重新載入頁面的情況下更新網頁
  • 在頁面已載入後向伺服器請求資料
  • 在頁面已載入後從伺服器接收資料
    所有現代瀏覽器 (IE7+、Firefox、Chrome、Safari 以及 Opera) 都內建了 XMLHttpRequest 物件。通過一行簡單的 JavaScript 程式碼,我們就可以建立 XMLHttpRequest 物件
    建立 XMLHttpRequest 物件的語法(xhr)
    var xmlhttp=new XMLHttpRequest();
    AJAX 中的核心物件就是 XMLHttpRequest

2.XMLHttpRequest物件解析

XMLHttpRequest 物件 open( method , url, true ) 第三個引數 true 表示非同步請求
非同步請求特點:

  • 1)某一個時刻,瀏覽器可以委託多個非同步請求物件傳送請求,無需等待請求處理完成。
  • 2)瀏覽器委託非同步請求物件工作期間,瀏覽器處於活躍狀態。可以繼續向下執行其他命令。
  • 3)當響應就緒後再對響應結果進行處理

實現步驟:

  • 1.設定非同步物件 open 方法第三個引數為 true
    // 初始請求引數 xmlHttp.open(“get”,“searchProvinceJson?proid=”+proid,true);
  • 2.send()後面,增加 alert()
    // 傳送請求 xmlHttp.send(); alert(“我是最後一行的程式碼”)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script type=
"text/javascript"
>
// 在這裡使用javaScript語言發起Ajax請求,訪問伺服器AjaxServlet中javaScriptAjax function ajaxRequest() { // 1、我們首先要建立XMLHttpRequest var xmlHttpRequest = new XMLHttpRequest(); // 2、呼叫open方法設定請求引數 // method:請求的型別;GET 或 POST // url:檔案在伺服器上的位置 // async:true(非同步或 false(同步 xmlHttpRequest.open("GET","http://localhost:8080/16_AJAX/ajaxServlet?action=javaScriptAjax",true); // 4、在send方法前繫結onreadystatechange事件,處理請求完成後的操作。 // onreadystatechange 事件 // 當請求被髮送到伺服器時,我們需要執行一些基於響應的任務。 // 每當 readyState 改變時,就會觸發 onreadystatechange 事件。 xmlHttpRequest.onreadystatechange = function () { if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){ // alert("收到伺服器返回的資料:" + xmlHttpRequest.responseText); //JSON.parse() 把 json 字串轉換成為 json 物件 var jsonObj = JSON.parse(xmlHttpRequest.responseText); // 把響應的資料顯示在頁面上 document.getElementById("div01").innerHTML = "編號:" + jsonObj.id + ",姓名:" + jsonObj.name; } } // 3、呼叫send方法傳送請求 xmlHttpRequest.send(); alert("我是最後一行的程式碼"); } </script> </head> <body> <button onclick="ajaxRequest()">ajax request</button> <div id="div01"> </div> </body> </html>
  • 3.SearchServletJson 類的 doGet 方法第一個加入斷點
    在這裡插入圖片描述
  • 4.部署應用,在瀏覽器訪問應用。
    點選“ajax request”按鈕,請求傳送到 Servlet,程式暫停執行, js 中 alert 執行繼續執行,沒有等待請求處理完成,瀏覽器視窗彈窗“我是最後一行的程式碼”字串

3.同步請求

XMLHttpRequest 物件 open( method , url, false ) 第三個引數 false 表示同步請求
同步請求特點

  • 某一個時刻,瀏覽器只能委託一個非同步請求物件傳送請求,必須等待請求處理完成。
  • 瀏覽器委託非同步請求物件工作期間,瀏覽器處於等待狀態。不能執行其他命令。
  • 不推薦使用。

實現步驟:同 之前步驟,需要 open(method,url,false)第三個引數設為 false。且部署應用後,程式暫停執行, js 中 alert 不會執行,處於等待狀態