所謂同步交互就是指客戶端向服器端發送請求後,必須等待結果返回才能進行下一次請求html
分析圖:
緩存
示例代碼:服務器
<body> <button id="btn">噠噠噠</button> <script src="js/createXMLHttpRequest.js"></script> <script> // 經過ID屬性獲取節點 var btn = document.getElementById('btn'); // 爲獲取的ID屬性綁定點擊事件 btn.addEventListener('click',function () { // 實現Ajax的異步交互 // 1.建立XMLHTTPRequest對象 var xhr = createXMLHttpRequest(); /* 2.調用XMLHTTPRequest對象的open()方法 * 做用 - 與服務器端創建鏈接 open(method,url)方法 * method - 表示當前的請求方式 * 常見的請求方式爲GET和POST * url - 表示當前請求的服務器端地址連接 */ xhr.open('get','http://localhost:63342/untitled/Study2/Ajax系列-01/1.測試XMLHTTPRequest對象.html?'); /* 3.調用XMLHttpRequest對象的send()方法 * 做用 - 將客戶端頁面的數據發送給服務器端 send()方法 * 若是不傳遞任何數據內容時 - 向該方法傳遞null */ xhr.send(null); /* 4.利用XMLHTTPRequest對象的onreadystatechange事件 * 做用 - 用於監聽服務器端的通訊狀態 * 服務器端的通訊狀態中 - 存在着處理完畢(信號) * 接收服務器端返回的處理結果 */ xhr.onreadystatechange = function () {// 監聽服務器端的通訊狀態 /* XMLHttpRequest對象的readyState屬性 * 做用 - 表示服務器端的通訊狀態 * 值: * 0 - 表示未初始化 * 1 - 表示open()方法被調用 * 2 - 表示send()方法被調用 * 3 - 表示正在響應 * 4 - 表示響應已完畢 */ if (xhr.readyState === 4) { /* 接收服務器端返回的處理結果 XMLHttpRequest對象的responseText屬性 * 做用 - 用於接收服務器端的響應結果 */ console.log(xhr.responseText); } } /* 5.將接收到的結果更新到HTML頁面 */ }); </script> </body>
XMLHttpRequest對象的readyState屬性app
值:異步
示例代碼:post
<body> <button id="btn">噠噠噠</button> <script src="js/createXMLHttpRequest.js"></script> <script> // 經過ID屬性獲取指定元素 var btn = document.getElementById('btn'); // 爲獲取的屬性綁定點擊事件 btn.addEventListener('click',function () { // 1.建立XMLHttpRequest對象 var xhr = createXMLHttpRequest(); xhr.onreadystatechange = function () {// 監聽服務器端的通訊狀態 /* XMLHttpRequest對象的readyState屬性 * 做用 - 表示服務器端的通訊狀態 * 值 * 0 - 未初始化 * 1 - open()方法被調用 * 2 - send()方法被調用 * 3 - 正在響應 * 4 - 響應已完畢 */ // console.log(xhr.readyState); if (xhr.readyState === 4) { /* 保證當前的異步請求必定是正確的 * XMLHttpRequest對象的status屬性 * 做用 - 獲得當前請求以後的響應狀態碼 * 200 - 表示請求成功 * 304 - 表示請求的資源未變化(轉向獲取本地緩存) * 404 - 表示服務器端地址未找到 */ console.log(xhr.status); if (xhr.status === 200) { /* 接收服務器端響應的結果 * responseText屬性 - 專門接收字符串類型的結果內容 * responseXML屬性 - 專門接收XML數據格式的結果內容 */ console.log(xhr.responseText); } } /*if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); }*/ }; xhr.open('get','http://localhost:63342/untitled/Study2/Ajax系列-01/1.測試XMLHTTPRequest對象.html?'); xhr.send(null); }); </script> </body>
send(data)方法測試
請求方式url
兩種狀況:spa
請求數據的格式code
示例代碼:
<body> <!-- 提交表單時,向服務器端發送數據 * 請求數據被添加請求連接地址中 * 請求數據的格式 1. 若是具備多個請求數據的話,之間使用"&"進行分隔 2. 每一個數據格式 - name=value --> <form action="#" method="get"> <input type="text" id="user" name="user"> <input type="text" id="pwd" name="pwd"> <input type="submit"> </form> <button id="btn">噠噠噠</button> <script src="js/createXMLHttpRequest.js"></script> <script> // 經過ID屬性獲取到指定元素 var btn = document.getElementById('btn'); // 爲獲取到的元素綁定點擊事件 btn.addEventListener('click',function () { // 1.建立XMLHttpRequest對象 var xhr = createXMLHttpRequest(); xhr.onreadystatechange = function(){// 監聽服務器端的通訊狀態 if (xhr.readyState === 4) { console.log(xhr.status); if (xhr.status === 200) { console.log(xhr.responseText); } } }; xhr.open('get','http://localhost:63342/untitled/Study2/Ajax系列-01/1.測試XMLHTTPRequest對象.html?'); /* 向服務器端發送請求數據 send(data)方法 * 參數data - 表示向服務器端發送的請求數據 * 請求方式 * 若是當前的請求方式爲GET的話 - send()方法中只能傳遞null值 * 將請求數據添加到請求地址連接中 * 兩種狀況: * 請求數據的格式 1.若是具備多個請求數據的話,之間使用"&"進行分隔 2.每一個數據格式 -> name=value * */ // 人爲方式獲取當前的數據,構建成指定的數據格式 xhr.send(null); }); </script> </body>
示例代碼:
<body> <!-- 表單提交時 - MIME類型的默認值 application/x-www-form-urlencoded --> <form action="#" enctype="application/x-www-form-urlencoded"> <input type="text" id="user" name="user"> <input type="text" id="pwd" name="pwd"> <input type="submit"> </form> <button id="btn">噠噠噠</button> <script src="js/createXMLHttpRequest.js"></script> <script> // 經過ID屬性獲取到指定元素 var btn = document.getElementById('btn'); // 爲獲取到的元素綁定點擊事件 btn.addEventListener('click',function(){ // 1.建立XMLHttpRequest對象 var xhr = createXMLHttpRequest(); xhr.onreadystatechange = function(){// 監聽服務器端的通訊狀態 if (xhr.readyState === 4) { console.log(xhr.status); if (xhr.status === 200) { console.log(xhr.responseText); } } }; xhr.open('post','http://localhost:63342/untitled/Study2/Ajax系列-01/1.測試XMLHTTPRequest對象.html?'); // 設置請求頭部信息 xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); /* send()方法 * 若是是GET,send()方法只能傳遞null值 -> 請求數據添加在請求地址中 * 若是是POST,send()方法傳遞請求數據 */ xhr.send('user=zhangwuji&pwd=123456'); }); </script> </body>