1.AJAX:異步的javascript和xml;
通過(guò)在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,AJAX 可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新。1.創(chuàng)建
XMLHttpRequest
對(duì)象,用于和服務(wù)器交換數(shù)據(jù)
var xmlhttp = new XMLHttpRequest();
//ie5\ie6創(chuàng)建方法(ActiveX)
var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
// 以下代碼實(shí)現(xiàn)兼容(來(lái)自w3c)
var xmlhttp;if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else {
// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}`
2.向服務(wù)器發(fā)送請(qǐng)求
xmlhttp.open("GET","test1.txt",true);
//規(guī)定請(qǐng)求的類(lèi)型、URL 以及是否異步處理請(qǐng)求。xmlhttp.send();
//將請(qǐng)求發(fā)送到服務(wù)器。
open(method,url,async)?method
:請(qǐng)求的類(lèi)型;GET 或 POST?url:文件在服務(wù)器上的位置?async:true(異步)或 false(同步)
當(dāng)是異步時(shí),瀏覽器把請(qǐng)求發(fā)送后就繼續(xù)做自己的事,當(dāng)onreadystatechange事件到來(lái)時(shí)說(shuō)明服務(wù)端的數(shù)據(jù)來(lái)了,這時(shí)再處理數(shù)據(jù)。類(lèi)似于一個(gè)節(jié)點(diǎn)綁定點(diǎn)擊事件后就做后面的事,當(dāng)用戶(hù)點(diǎn)擊了再執(zhí)行綁定的處理函數(shù)。
當(dāng)是同步時(shí),JavaScript 會(huì)等到服務(wù)器響應(yīng)就緒才繼續(xù)執(zhí)行。如果服務(wù)器繁忙或緩慢,應(yīng)用程序會(huì)掛起或停止。 當(dāng)使用async=false
時(shí),不用編寫(xiě)onreadystatechange
函數(shù),把代碼放到 send() 語(yǔ)句后面即可.
注釋?zhuān)寒?dāng)您使用async=false
時(shí),請(qǐng)不要編寫(xiě)onreadystatechange
函數(shù) - 把代碼放到 send() 語(yǔ)句后面即可.
send(string)?string:僅用于 POST 請(qǐng)求
3.服務(wù)器響應(yīng)
responseText 獲得字符串形式的響應(yīng)數(shù)據(jù)。 responseXML 獲得 XML 形式的響應(yīng)數(shù)據(jù)。 document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
4.onreadystatechange 事件;當(dāng)請(qǐng)求被發(fā)送到服務(wù)器時(shí),我們需要執(zhí)行一些基于響應(yīng)的任務(wù)。每當(dāng) readyState 改變時(shí),就會(huì)觸發(fā) onreadystatechange 事件。 readyState 屬性存有 XMLHttpRequest 的狀態(tài)信息。 下面是 XMLHttpRequest 對(duì)象的三個(gè)重要的屬性:
**onreadystatechange **: 存儲(chǔ)函數(shù)(或函數(shù)名),每當(dāng) readyState 屬性改變時(shí),就會(huì)調(diào)用該函數(shù)。
**readyState **: XMLHttpRequest 的狀態(tài)。從 0 到 4 發(fā)生變化。0: 請(qǐng)求未初始化1: 服務(wù)器連接已建立2: 請(qǐng)求已接收3: 請(qǐng)求處理中4: 請(qǐng)求已完成,且響應(yīng)已就緒
status :200: "OK"404: 未找到頁(yè)面
以下為部分js代碼:
function ajax(opts){ var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function(){ if(xmlhttp.readyState==4 && xmlhttp.status==200){ opts.success(xmlhttp.responseText); }else if(xmlhttp.status==404){ opts.error(); } } xmlhttp.open(opts.type,opts.url+"?"+url(opts),true); xmlhttp.send(); }
2.Jquery ajax
防止重復(fù)提交當(dāng)用戶(hù)提交請(qǐng)求時(shí),后臺(tái)處理請(qǐng)求是需要時(shí)間的。如果在后臺(tái)給出響應(yīng)之前用戶(hù)多次點(diǎn)擊提交,后端就會(huì)多次收到請(qǐng)求,返還多次內(nèi)容。對(duì)于表單,可在用戶(hù)初次提交后把按鈕設(shè)置為disabled,當(dāng)數(shù)據(jù)響應(yīng)后再去掉disabled屬性。對(duì)于ajax請(qǐng)求,可設(shè)置標(biāo)記變量flag,初始時(shí)設(shè)置flag為true.在用戶(hù)點(diǎn)擊提交按鈕后,判斷flag是否為true,如果是則發(fā)送ajax請(qǐng)求,并把flag設(shè)置為false。 等服務(wù)端給出響應(yīng)后再把flag設(shè)置為true。