HtttpRequest對象是Ajax的核心,它有許(xu)多的屬性(xing)、方(fang)法和(he)事件以便(bian)于腳本處理和(he)控(kong)制(zhi)HTTP的請求與相(xiang)應,下(xia)(xia)面蘇州網站制(zhi)作主要講述(shu)一(yi)下(xia)(xia)open() 和(he)send()方(fang)法。
XMLHttpRequets對(dui)象是通(tong)過調用open(method,uri,async,username,password)方法(fa)來進行初(chu)始化工作(zuo)的。調用該(gai)方法(fa)得到一個可以用來進行發行(send()方法(fa))的對(dui)象。Open()方法(fa)有5個參數。
(1)method參數(shu)(shu)是必須提供(gong)的,用于指定用來發送(song)請(qing)求的HTTP方法(GET,POST,PUT,DELETE或HEAD)。按照HTTP規(gui)范,該參數(shu)(shu)要大(da)寫(xie)。
(2)uri參數用于指定XMLHttpRequest對象把請求(qiu)發送到的(de)服務器響應(ying)的(de)URL,該(gai)地址會被自動(dong)解析位絕(jue)對地址。
(3)async參數用于指定(ding)是否請求是異步的,其默認值(zhi)是TRUE。如果需(xu)要發(fa)送一個同步請求,需(xu)要把該參數設置(zhi)為(wei)false。
(4)如果需要服(fu)務器驗證(zheng)訪問用戶的(de)情況,那么可(ke)以設置username以及password這兩個參(can)數(shu)。
調(diao)(diao)用(yong)opend()方(fang)法(fa)(fa)后(hou),就可以通過調(diao)(diao)用(yong)send()方(fang)法(fa)(fa)按照open()方(fang)法(fa)(fa)設定的(de)參數將(jiang)請求(qiu)進行發送。當open()方(fang)法(fa)(fa)中async參數為true時,在send()方(fang)法(fa)(fa)調(diao)(diao)用(yong)后(hou)立即返回,否(fou)則將(jiang)會(hui)終端直到請求(qiu)返回。需要(yao)注意的(de)是(shi),send()方(fang)法(fa)(fa)必(bi)須在readyState屬性值(zhi)為1時,即調(diao)(diao)用(yong)open()方(fang)法(fa)(fa)以后(hou)才(cai)可能調(diao)(diao)用(yong)。在調(diao)(diao)用(yong)send()方(fang)法(fa)(fa)以后(hou)到接(jie)(jie)受到響應(ying)信(xin)息之前,readyState屬性的(de)值(zhi)將(jiang)被設置為2;一旦接(jie)(jie)收(shou)到響應(ying)信(xin)息,readyState屬性值(zhi)將(jiang)會(hui)被設為3;知道響應(ying)接(jie)(jie)收(shou)完成,readyState屬性的(de)值(zhi)才(cai)會(hui)被設為4。
Send()方(fang)(fang)(fang)法(fa)(fa)(fa)(fa)(fa)使(shi)用(yong)(yong)一(yi)個(ge)(ge)可(ke)(ke)選(xuan)的(de)參(can)(can)數(shu)(shu),該參(can)(can)數(shu)(shu)可(ke)(ke)以(yi)包(bao)含可(ke)(ke)變類(lei)型(xing)的(de)數(shu)(shu)據(ju)。用(yong)(yong)戶可(ke)(ke)以(yi)使(shi)用(yong)(yong)它并(bing)通(tong)過POST方(fang)(fang)(fang)法(fa)(fa)(fa)(fa)(fa)把(ba)數(shu)(shu)據(ju)發(fa)送到服務(wu)器(qi)。另外(wai),可(ke)(ke)以(yi)顯式地使(shi)用(yong)(yong)null參(can)(can)數(shu)(shu)調用(yong)(yong)send()方(fang)(fang)(fang)法(fa)(fa)(fa)(fa)(fa),這與(yu)不(bu)同參(can)(can)數(shu)(shu)調用(yong)(yong)該方(fang)(fang)(fang)法(fa)(fa)(fa)(fa)(fa)一(yi)樣。對于大多數(shu)(shu)其他的(de)參(can)(can)數(shu)(shu)類(lei)型(xing),再調用(yong)(yong)send()方(fang)(fang)(fang)法(fa)(fa)(fa)(fa)(fa)之前(qian),應(ying)該使(shi)用(yong)(yong)setRequestHeader()方(fang)(fang)(fang)法(fa)(fa)(fa)(fa)(fa)先設(she)置Content-Type頭(tou)部。如果send(data)方(fang)(fang)(fang)法(fa)(fa)(fa)(fa)(fa)中的(de)data參(can)(can)數(shu)(shu)的(de)類(lei)型(xing)為(wei)DOMString,那么,數(shu)(shu)據(ju)將(jiang)被(bei)編譯為(wei)UTF-8。如果數(shu)(shu)據(ju)是(shi)Document類(lei)型(xing),那么將(jiang)使(shi)用(yong)(yong)由data.xmlEncoding指定的(de)編碼串行(xing)化該數(shu)(shu)據(ju)。setRequestHeader()方(fang)(fang)(fang)法(fa)(fa)(fa)(fa)(fa)是(shi)用(yong)(yong)來設(she)置請求(qiu)的(de)頭(tou)部信息。當readyState屬性(xing)值為(wei)1時(shi),可(ke)(ke)以(yi)再調用(yong)(yong)open()方(fang)(fang)(fang)法(fa)(fa)(fa)(fa)(fa)后(hou)調用(yong)(yong)這個(ge)(ge)方(fang)(fang)(fang)法(fa)(fa)(fa)(fa)(fa);否(fou)則將(jiang)得到一(yi)個(ge)(ge)異常(chang)。SetRequestHeader(header,value)方(fang)(fang)(fang)法(fa)(fa)(fa)(fa)(fa)包(bao)含兩個(ge)(ge)參(can)(can)數(shu)(shu):前(qian)一(yi)個(ge)(ge)是(shi)header鍵名稱,后(hou)一(yi)個(ge)(ge)是(shi)鍵值。getRequestHeader()方(fang)(fang)(fang)法(fa)(fa)(fa)(fa)(fa)用(yong)(yong)于檢索響(xiang)應(ying)的(de)頭(tou)部值,僅當readState屬性(xing)值是(shi)3或4(即在(zai)響(xiang)應(ying)頭(tou)部可(ke)(ke)用(yong)(yong)后(hou))時(shi),才(cai)可(ke)(ke)以(yi)調用(yong)(yong)這個(ge)(ge)方(fang)(fang)(fang)法(fa)(fa)(fa)(fa)(fa);否(fou)從,該方(fang)(fang)(fang)法(fa)(fa)(fa)(fa)(fa)返回一(yi)個(ge)(ge)空字符串。此處還可(ke)(ke)以(yi)通(tong)過getAllRequestHeaders()方(fang)(fang)(fang)法(fa)(fa)(fa)(fa)(fa)獲取所有(you)的(de)HttpRequest的(de)頭(tou)部信息。