1. 程式人生 > >Ajax非同步請求--readyState

Ajax非同步請求--readyState

概述

XMLHttpRequest.readyState 屬性返回一個 XMLHttpRequest 代理當前所處的狀態。一個 XHR 代理總是處於下列狀態中的一個:

readyState 狀態描述 狀態描述
0 UNSEND 代理物件已經被建立,但尚未呼叫open()方法
1 OPENED open()方法已經呼叫,建立與服務埠特定的連結
2 HEADERS_RECEIVED send()方法已經被呼叫,並獲得了狀態行和響應頭
3 LOADING 響應體下載中,可能已經下載部分資料了
4 DONE 響應體下載完成,可以直接使用responseText

程式碼–代理物件的狀態

隨便一個符號語法的json都可以
準備一個後臺檔案json字串,通過前後臺互動理解readyState


  • 狀態為0
	var xhr = new XMLHttpRequest();
	console.log(xhr.readyState) //0
	//建立XHR,即請求初始化
  • 狀態為1
    後臺的檔案這裡是data.php
	xhr.open('get','data.php')
	console.log(xhr.readyState) //1
	// 呼叫open()方法,建立與伺服器埠的特定連結
  • 狀態為2
xhr.send()
	xhr.addEventListener('readystatechange', function(){
		switch(xhr.readyState){
			case 2:
			console.log(this.readyState)  //2
			//send()方法已經呼叫,可以拿到響應頭了
	   		console.
log(this.responseText) //此時尚未拿到 console.log(this.getAllResponseHeaders()) //date: Fri, 28 Dec 2018 02:28:34 GMT //server: Apache/2.2.21 (Win32) PHP/5.3.10 //connection: Keep-Alive //x-powered-by: PHP/5.3.10 //content-length: 380 //keep-alive: timeout=5, max=99 //content-type: text/html break; } })

已經拿到響應頭

  • 狀態為3
			case 3:
			console.log(this.readyState)  //3
	   		console.log(this.responseText)  //拿到響應體,可能是不完整的
	   		break;

看一下拿到的json
部分截圖
後面很明顯是斷開了,是不完整;資料少,網速快等等,也有可能是完整,所以測試可以調一下慢網速看看

  • 狀態為4
case 4:
			console.log(this.readyState)  //4
	   		console.log(this.responseText)  //響應體下載完成,responseText可以使用
	   		console.log(document.readyState)
	   		var obj = JSON.parse(this.responseText)
	   		break;

部分截圖
最後拿到的資料是完整的


使用我們JSON.parse轉換成物件使用

console.log(obj)

轉成我們所熟悉的物件