JavaScript透過瀏覽器發送資訊給伺服器,在不重新整理整個網頁的情況下,和資料庫、後端或伺服器要求資料之後,伺服器回傳結果,再經由JavaScript來判斷處理,整理出需要的資料。
XMLHttpRequst()
要求資料可以透過readyState
查看狀況:
readyState
為0var xhr = XMLHttpRequst();
當執行了XMLHttpRequst()
,readyState
就會顯示為0。
代表已產生XMLHttpRequst,但尚未連結要撈取的資料。
readyState
為1xhr.open('格式', '讀取網址', 同步與否);
格式可以分為兩種,一種是get
,代表讀取資料;另一種是post
,代表傳送資料到伺服器。
同步與否,帶入的參數是布林值,true
代表非同步,false
代表同步。
此時readyState
為1,代表已經使用了open
,但尚未傳送資料。
ex:
xhr.open('get', 'http://xxx.xxx.xx', true);
readyState
為4shr.send(null);
因為在這裡不傳送資料,因此小括弧中填null
,代表空值。
此時可以從responseText
中看到資料,只要用DOM元素的方式處理即可,若資料格式是字串,再用JSON.parse
處理轉成JSON格式。
這時readyState`會顯示為4,代表已撈取到資料,且數據已完全接收。
readyState
為其他數字當readyState
為2時,代表偵測到有用send
。
readyState
為3時,則代表正在加載資料中(Loading)。
XMLHttpRequst()
的第三個參數——同步與非同步照前述程式碼操作後,執行下列程式碼會回傳空行:
console.log(xhr.responseText);
這是因為在XMLHttpRequst()
中的第三個參數中,true
代表的是非同步。
所以,不會等資料傳回來,程式碼就向下執行,等到資料回傳後才會自動回傳,
而在執行console.log()
時資料尚未回傳回來,所以會撈取不到任何資料。
那如果選擇參數帶入false
呢?
在XMLHttpRequst()
中的第三個參數中,false
是同步的意思。
在此時執行console.log()
就可以撈取到資料,因為在這個情況下,程式會等資料傳回來後,才會繼續向下執行程式碼。
兩種用法各有優缺,使用非同步的原因是因為有時資料太大,不可能等資料撈完後材繼續執行——因為這樣會等很久,因此用非同步,可以節省載入時間。