這里的ajax可不是大名鼎鼎的ajax俱樂(lè )部, 這四個(gè)字母在這里Asynchronous JavaScript and XML的縮寫(xiě)。通俗地描述這項技術(shù)就是:用 JavaScript 向服務(wù)器獲取數據,然后更新網(wǎng)頁(yè)的局部,而不是刷新整個(gè)網(wǎng)頁(yè)。
這項技術(shù)非常適合用來(lái)開(kāi)發(fā)以瀏覽器為客戶(hù)端的系統的界面,使用ajax給用戶(hù)帶來(lái)的更好的體驗,他們不會(huì )感覺(jué)到用瀏覽器開(kāi)發(fā)的客戶(hù)端與桌面程序有什么差別。
ajax使用了比較多的javacript,并需要訪(fǎng)問(wèn)很多dom對象,這常常給跨瀏覽器訪(fǎng)問(wèn)帶來(lái)困擾。但假如你小心應對,還是容易解決這個(gè)問(wèn)題的。比如,你想從服務(wù)器段獲得一些數據,你必然要用到xmlhttp,為了讓程序瀏覽器無(wú)關(guān),你可以這樣創(chuàng )建xmlhttp對象:
//for IE
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
//for firefox
if (!xmlhttp && typeof XMLHttpRequest!=‘undefined‘) {
xmlhttp = new XMLHttpRequest();
}
在很多的ajax范例中,開(kāi)發(fā)者都是用xmlhttp從服務(wù)器端獲得一個(gè)xml數據,然后轉換成javascript可觸及的對象,再用js繪制到document中。但我覺(jué)得這并非唯一選項,我甚至覺(jué)得是多此一舉!為什么不直接傳遞js對象呢?在我開(kāi)發(fā)的系統中,xmlhttp從服務(wù)器上獲得的是代表js對象的字符串。假如我要傳送一個(gè)人員列表,我會(huì )在服務(wù)器上輸出:
[{id:1,name:"hexiaodong"},{id:2,name:"mary"},{id:3,name:"name"},...]}
然后在瀏覽器上用js獲得這個(gè)字符串所代表的對象:
var returned = xmlhttp.responseText;
var obj = eval(returned );
接著(zhù),你就可以這樣訪(fǎng)問(wèn):
var person1 = obj[0]; var person2 = obj[1];
alert(person1.id);
alert(person1.name);
我覺(jué)得這樣做比傳遞xml文檔直接一些,不必通過(guò)轉換可以讓js直接訪(fǎng)問(wèn)數據,而且是通過(guò)對象導航來(lái)訪(fǎng)問(wèn)的,爽一個(gè)字。
ajax最后一環(huán),就是通過(guò)dom對象繪制界面,這方面我也不是很精通,每次對著(zhù)msdn畫(huà)瓢唄。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。