JS AJAX


XMLHttpRequest 對象

創建 XMLHttpRequest 對象
var xhttp;
if (window.XMLHttpRequest) {
	//所有現代瀏覽器都有內建的 XMLHttpRequest 對象
    xhttp = new XMLHttpRequest();
    } else {
    // 老版本的 Internet Explorer(IE5 和 IE6)使用 ActiveX 對象
     xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

在這裏插入圖片描述在這裏插入圖片描述


向服務器發送請求

使用 open()send() 方法向服務器發送請求

在這裏插入圖片描述
GET 比 POST 更簡單更快,可用於大多數情況下
不過,請在以下情況始終使用 POST:

  • 無法使用緩存文件(更新服務器上的文件或數據庫)
  • 向服務器發送大量數據(POST 無大小限制)
  • 發送用戶輸入(可包含未知字符),POST 比 GET 更強大更安全

向 URL 添加一個唯一的 ID:

xmlhttp.open("GET","/try/ajax/demo_get.php?t=" + Math.random(),true);

通過 GET 方法發送信息,向 URL 添加信息:

xmlhttp.open("GET","/try/ajax/demo_get2.php?fname=Henry&lname=Ford",true);

如果需要像 HTML 表單那樣 POST 數據,使用 setRequestHeader() 來添加 HTTP 頭,然後在 send() 方法中規定希望發送的數據:

xmlhttp.open("POST","/try/ajax/demo_post2.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");	//規定不變
xmlhttp.send("fname=Henry&lname=Ford");
同步

當您使用 async=false 時,請不要編寫 onreadystatechange 函數 - 把代碼放到 send() 語句後面即可:

xmlhttp.open("GET","/try/ajax/ajax_info.txt",false);
xmlhttp.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

服務器 響應

responseText 屬性

responseText 屬性返回字符串形式的響應

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

responseXML 屬性

如果來自服務器的響應是 XML,而且需要作爲 XML 對象進行解析,請使用 responseXML 屬性

請求 cd_catalog.xml 文件,並解析響應:

xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
{
    txt=txt + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("myDiv").innerHTML=txt;

onreadystatechange 事件

在 onreadystatechange 事件中,我們規定當服務器響應已做好被處理的準備時所執行的任務
當 readyState 等於 4 且狀態爲 200 時,表示響應已就緒:

xmlhttp.onreadystatechange=function()
{
	//onreadystatechange 事件被觸發 4 次(0 - 4), 分別是: 0-1、1-2、2-3、3-4,對應着 readyState 的每個變化
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章