建立XMLHttpRequest物件

2021-07-14 03:55:03 字數 3083 閱讀 3269

與之前眾多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();

//open方法 建立乙個新的http請求,並指定此請求的方法、url以及驗證資訊(使用者名稱/密碼)

xhr.open("get","test.txt",true);

/*第乙個引數是請求方式,一般用get與post方法,與form標籤的method類似

第二個引數是請求的url

第三個引數是請求是同步進行還是非同步進行,true表示非同步

呼叫了open方法僅僅是傳遞了引數而已*/

xhr.send(null);//呼叫了send方法後才會發出請求

//並且get方式傳送請求時send引數是null

在伺服器環境中執行上面的指令碼,並且給乙個php或asp指令碼傳送請求,會發現伺服器端指令碼其實會被執行

//php指令碼

$fp =fopen("a.txt","wb");

fwrite($fp,"php檔案在後台執行了");

fclose($fp);

echo "返回內容!";

上面php指令碼的返回內容不會直接在頁面上顯示出來,必需要用js通過xhr物件接收

var xhr = xhr();

xhr.open("get","test.php",true);

xhr.onreadystatechange = callback;//在readystatechange事件上繫結乙個函式

//當接收到資料時,會呼叫readystatechange事件上的事件處理函式

xhr.send(null);

functon callback()

}

readystate屬性 返回當前請求的狀態
var xhr =xhr();

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);

從上面可以看到,對於readystate這個屬性,各個瀏覽器看法也不一樣,但其實我們只需要知道當狀態為4的時候可以獲取response就行了!

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 請求

//js

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);

post 請求

//js

var 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...