與之前眾多dom操作一樣,建立xhr物件也具有相容性問題:ie6及之前的版本使用activexobject,ie7之後及其它瀏覽器使用xmlhttprequest
不但ie6及其之前的版本將xhr作為乙個activexobject執行,而且還存在眾多版本:一開始是microsoft.xmlhttp 之後變成msxml2.xmlhttp及更新版的msxml3.xmlhttp
function xhr()catch(e)
catch(e)
}} return xhr;
}
var xhr = xhr();在伺服器環境中執行上面的指令碼,並且給乙個php或asp指令碼傳送請求,會發現伺服器端指令碼其實會被執行//open方法 建立乙個新的http請求,並指定此請求的方法、url以及驗證資訊(使用者名稱/密碼)
xhr.open("get","test.txt",true);
/*第乙個引數是請求方式,一般用get與post方法,與form標籤的method類似
第二個引數是請求的url
第三個引數是請求是同步進行還是非同步進行,true表示非同步
呼叫了open方法僅僅是傳遞了引數而已*/
xhr.send(null);//呼叫了send方法後才會發出請求
//並且get方式傳送請求時send引數是null
//php指令碼上面php指令碼的返回內容不會直接在頁面上顯示出來,必需要用js通過xhr物件接收$fp =fopen("a.txt","wb");
fwrite($fp,"php檔案在後台執行了");
fclose($fp);
echo "返回內容!";
var xhr = xhr();readystate屬性 返回當前請求的狀態xhr.open("get","test.php",true);
xhr.onreadystatechange = callback;//在readystatechange事件上繫結乙個函式
//當接收到資料時,會呼叫readystatechange事件上的事件處理函式
xhr.send(null);
functon callback()
}
var xhr =xhr();從上面可以看到,對於readystate這個屬性,各個瀏覽器看法也不一樣,但其實我們只需要知道當狀態為4的時候可以獲取response就行了!alert(xhr.readystate);//0
xhr.open("get","test.htm",true);
alert(xhr.readystate);//1
xhr.send(null);
alert(xhr.readystate);//ie下會是4,而ff下會是2
//可以通過readystatechange事件監聽
xhr = xhr();
xhr.onreadystatechange = function () ;
xhr.open("get","test.txt",true);
xhr.send(null);
status 返回當前請求的http狀態碼
status屬性返回當前請求的http狀態碼,此屬性僅當資料傳送並接收完畢後才可獲取。完整的http狀態碼如下:
事實上,我們只需要知道狀態為200的時候(ok)才讀取response就行了!
responsetext與respon***ml
responsetext 將響應資訊作為字串返回 . xmlhttp嘗試將響應資訊解碼為unicode字串,xmlhttp預設將響應資料的編碼定為utf-8,如果伺服器返回的資料帶bom(byte-order mark),xmlhttp可以解碼任何ucs-2 (big or little endian)或者ucs-4 資料。注意,如果伺服器返回的是xml文件,此屬性並不處理xml文件中的編碼宣告。你需要使用respon***ml來處理。
respon***ml 將響應資訊格式化為xml document物件並返回 . 如果響應資料不是有效的xml文件,此屬性本身不返回xmldomparseerror,可以通過處理過的domdocument物件獲取錯誤資訊。
其它一些xhr物件的方法
abort 取消當前請求
getallresponseheaders 獲取響應的所有http頭 每個http頭名稱和值用冒號分割,並以\r\n結束。當send方法完成後才可呼叫該方法。
getresponseheader 從響應資訊中獲取指定的http頭 當send方法成功後才可呼叫該方法。如果伺服器返回的文件型別為"text/xml", 則這句話xmlhttp.getresponseheader("content-type");將返回字串"text/xml"。可以使用getallresponseheaders方法獲取完整的http頭資訊。
setrequestheader 單獨指定請求的某個http頭 如果已經存在已此名稱命名的http頭,則覆蓋之。此方法必須在open方法後呼叫。
get 請求
//jspost 請求var xhr = xhr();
xhr.open("get","test.php?qs=true&username=abc&pwd=123456",true);
xhr.onreadystatechange = function ()
};xhr.send(null);
//php
print_r($_get);
//jsvar xhr = xhr();
xhr.open("post","test.php",true);
xhr.onreadystatechange = function ()
};//比get請求多了一步
//另外,資料是通過send方法傳送的
xhr.send("qs=true&username=abc&pwd=123456");
//php
header("cache-control: no-cache, must-revalidate");//可以讓瀏覽器不快取結果
print_r($_post);
來自:
Ajax的核心 XMLHttpRequest 物件
所有現代瀏覽器 chrom ie7 firefox safari 以及 opera 都有內建的 xmlhttprequest 物件。建立 xmlhttprequest 的語法是 variable new xmlhttprequest 老版本的 internet explorer ie5 和 ie6 ...
建立主鍵 建立外來鍵 建立約束
建立主鍵 三種方法 建立學生表 第一種 create table student sno char 5 primary key,學號 可以直接指定主鍵 sname char 20 not null,姓名 s char 3 not null,性別 sage integer not null,年齡 sd...
Oracle建立儲存過程 建立函式 建立包
一 oracle建立儲存過程 1 基本語法 create orreplace procedureupdate emp sal name inout type,name inout type,is begin endupdate emp sal 2 寫乙個簡單的例子修改emp表的ename欄位 cre...