第一種:XMLHttpRequest
其一老式做法 ── XMLHttpRequest
格式:‘get’(讀取資料)、‘post’(傳送資料至該資料庫)
1 | var xhr = new XMLHttpRequest(); |
其中第五行執行的 data = JSON.parse(xhr.responseText)需要提醒一下,因為 JSON 雖然本身是“陣列包物件”的格式,但資料在傳輸的時候必須轉換成 string(字串),所以我們在接收到了傳送來的「字串」時,就必須使用 JSON.parse 將其轉換回原本的格式
console可得知的串接狀態
xmlHttp5個狀態:
var state = xmlHttp.readyState;//可能是0、1、2、3、4
- 0狀態:剛創建,還沒有調用open()方法;
- 1狀態:請求開始:調用了open()方法,但還沒有調用send()方法
- 2狀態:調用完了send()方法了;
- 3狀態:服務器已經開始響應,但不表示響應結束了!
- 4狀態:服務器響應結束!(通常我們只關心這個狀態!!!)
得到服務器響應的狀態碼:
var status = xmlHttp.status;//例如為200、404、500
第二種:jQuery- 原語法
請參考: jQuery串接影片
1 |
|
第三種:jQuery- Fetch語法
Fetch與 $.ajax 不同點在於:
- fetch 會使用 ES6 的 Promise 作回應
- then 作為下一步
- catch 作為錯誤回應 (404, 500…)
- 回傳的為 ReadableStream 物件,需要使用不同資料類型使用對應方法,才能正確取得資料物件。
1 | fetch('https://randomuser.me/api/', {}) |
觀念解析
true(預設值) 非同步
使用非同步的設定時,我們的程式碼不會等到資料回傳回來,就會開始執行後續程式碼,因為有時候我們撈取的 JSON 檔是一大筆資料,那等我們等一大筆筆資料抓完才去執行後續動作,網頁就會在載入完成之前都卡在那邊,無形中就會浪費許多時間成本,因此若要執行非同步,則需另設定一組函式來判定onload狀態,當onload完成後即可取得資料。
false 同步
會等資料回傳(接收)完畢,才繼續往下跑