json
你可使用AJAX最主要的兩個特性作下列事:跨域
在不從新加載頁面的狀況下發送請求給服務器。瀏覽器
接受並使用從服務器發來的數據。安全
var xhr = null; if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); // ie7+等現代瀏覽器 } else if (window.ActiveXObject) { // ie6,老版Opera xhr = new ActiveXObject('Microsft.XMLHTTP'); } xhr.open('get', 'db.json', true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { /* readyState 請求的當前狀態 status 響應碼 */ xhr.responseText; JSON.parse(xhr.responseText); } } xhr.send();
var xhr = null; // 建立異步對象 if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); // ie7+等現代瀏覽器 } else if (window.ActiveXObject) { // ie6,老版Opera xhr = new ActiveXObject('Microsft.XMLHTTP'); }
服務器
xhr.open('GET', 'db.json', true);
open()
方法是會有 「權限被拒絕」 錯誤提示。一個容易犯的錯誤是你企圖經過 domain.tld
訪問網站, 而不是使用 www.domain.tld
。若是你真的須要向另外一個域名發送請求, 能夠查看 HTTP access control。true
(默認設置),JavaScript執行會持續,而且在服務器尚未響應的狀況下與頁面進行交互。app
dom
請求報文中請求頭的Content-Type應該跟隨請求體格式的變化而變化異步
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); httpRequest.send('key1=value1&key2=value2'); xhr.setRequestHeader('Content-Type', 'application/json'); httpRequest.send('{"foo":"123"}');
函數
網站
"name=value&anothername="+encodeURIComponent(myVar)+"&so=on" //或者其餘格式, 相似 multipart/form-data,JSON,XML等。
xhr.onreadystatechange = function () { // 若爲同步,此代碼不用寫,直接在send後,用`xhr.responseText`便可。 if (xhr.readyState == 4 && xhr.status == 200) { //在檢查完請求狀態和HTTP響應碼後, 你就能夠用服務器返回的數據作任何你想作的了 xhr.responseText; JSON.parse(xhr.responseText); } }
|
名 |
解釋 |
---|---|---|
0:未初始化 |
UNSENT |
還沒有調用open()方法 |
1:啓動 |
OPENED |
已經調用open()方法,已創建服務器鏈接,但還沒有調用send()方法 |
2:發送 |
HEADERS_RESPONSE |
已經調用send()方法,請求已接受,但還沒有接受到響應拿不到響應體(responseText),此時能夠拿到頭.getAllResponseHeaders() |
3:接收 |
LOADING |
已經接收到部分響應數據 |
4:完成 |
DONE |
已經接收到所有響應數據,並且能夠在客戶端使用 |
服務器以文本字符的形式返回
以 XMLDocument 對象方式返回,以後就可使用JavaScript來處理
跨域問題 HTTP access control
HTTP全部響應碼 MDN