Ajax實現異步數據獲取

AJAX:

Asynchronous JavaScript and XML。現在允許瀏覽器與服務器通信而無須刷新當前頁面的技術都被叫做Ajax.(B/S:前後端分離)

使用場景舉例:

在百度等搜索引擎打出xxs時輸入框會自動彈出相關的信息、網頁地圖放大或者縮小時並不會刷新網頁等。

原理:

使用ajax與服務器交互時,發送以及接收的信息是特殊數據格式,而非整個網頁程序,因此不需要刷新。即數據在客戶端與服務器之間獨立傳輸。服務器不再返回整個頁面,而只返回可用信息。

發送Ajax請求步驟:

1.調用open方法,代表預備發送請求。
2.如果請求類型爲POST,則需設定響應頭。
3.發送http請求指令,傳遞參數。
4.聲明請求狀態改變的回調函數,接收服務器響應信息。
在這裏插入圖片描述

readyState:表示Ajax請求的當前狀態,取值範圍如下:

0 代表未初始化。 還沒有調用 open 方法
1 代表正在加載。 open 方法已被調用,但 send 方法還沒有被調用
2 代表已加載完畢。send 已被調用。請求已經開始
3 代表交互中。
4 代表完成。響應發送完畢。(一般情況下只需判斷此狀態即可)。

status:服務器發送的響應狀態碼,常用狀態碼及其含義:

404 沒找到頁面(not found)
403 禁止訪問(forbidden)
500 內部服務器出錯(internal service error)
200 一切正常(ok)
304 沒有被修改(not modified)

注意:通過XHR.status和200比較,可以確保服務器是否已發送了一個成功的響應

json文件的內容:

"{\"user\":\"zhangsan\",\"age\":19,\"date\":\"2019-09-23T02:55:11.945Z\",\"money\":[1,2,3]}"
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			// js裏XMLHttpRequest類似於python裏的request、urlib
			// XHR是XMLHttpRequest對象的縮寫,封裝在window對象中,封裝了發送AJAX請求、接收響應的屬性以及方法。
			// 如果XMLHttpRequest對象存在,則把 xhr 的值設爲該對象的新實例。如果不存在,就去檢測 ActiveObject 的實例是否             	
			//存在,如果答案是肯定的,則把微軟 XMLHTTP 的新實例賦給 xhr
			function getXHR(){
				if(window.XMLHttpRequest){
					return new window.XMLHttpRequest()
				}else{
					// 解決微軟的特殊情況
					new window.ActiveXObject('Microsoft.XMLHTTP')
				}
			}
			//異步請求數據函數
			function jsonData(){
				var xhr = getXHR()  //局部化,防止衝突
				xhr.open('GET','data.json')
				//xhr.setRequestHeader()
				xhr.send(null)
				xhr.onreadystatechange=function(){
					if(xhr.readyState ==4 && xhr.status==200){
						//得到服務器返回的jaon字符串
						resp = xhr.responseText
						htmlText = ''
						//解析字符串爲json對象,解析兩遍是因爲JSON.parase(resp)是字符串類型
						jsonObj = JSON.parse(JSON.parse(resp))
						//console.log(typeof(jsonObj))  //查看類型
						//組織顯示html格式
						htmlText = '<tr><td>' + jsonObj.user +'</td></tr>'
						document.getElementById('userData').innerHTML = htmlText
					}
				}
			}
			
//			function setInnerHTML(id,text){
//				document.getElementById(id).innerHTML = htmlText
//			}
		</script>
	</head>
	<body>
		<input type="button" value="加載" onclick="jsonData()"/>
		<table>
			<thead>
				<tr><td>用戶名</td></tr>
			</thead>
			<tbody id='userData'> </tbody>
		</table>
	</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章