JavaScript能否撐起AJAX的未來(lái)
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
初聞AJAX是06年的春天,當(dāng)時(shí)對(duì)AJAX的記憶,就是荷蘭那只充滿(mǎn)的潛力的球隊(duì)。如今此AJAX就如同彼AJAX一樣,令人驚艷,異步更新使得許多桌面軟件的效果可以在WEB上實(shí)現(xiàn),AJAX也成為了WEB2.0的主要標(biāo)志。
雖然AJAX越來(lái)越流行,但是我難免不為其潑點(diǎn)冷水,結(jié)合自身的經(jīng)驗(yàn)我認(rèn)為目前AJAX開(kāi)發(fā)有以下幾個(gè)問(wèn)題,這些問(wèn)題將可能成為束縛其發(fā)展。 在提出問(wèn)題之前,我想有必要闡述兩個(gè)觀點(diǎn):1.異步更新的方向是正確的 2 我的評(píng)論只涉及javaScript。 目前JAVASCRIPT開(kāi)發(fā)面臨的最大問(wèn)題就是依賴(lài)瀏覽器: (一) 語(yǔ)法及函數(shù)依賴(lài)瀏覽器 以下這段代碼大家應(yīng)該熟悉 function makeRequest(url) {var http_request = false;if (window.XMLHttpRequest) { // Mozilla, Safari,...http_request = new XMLHttpRequest();if (http_request.overrideMimeType) {http_request.overrideMimeType('text/xml');// See note below about this line}} else if (window.ActiveXObject) { // IEtry {http_request = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {try {http_request = new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {}}}if (!http_request) {alert('Giving up :( Cannot create an XMLHTTP instance');return false;}http_request.onreadystatechange = function() { alertContents(http_request); };http_request.open('GET', url, true);http_request.send(null);}這只是簡(jiǎn)單的例子,為了生成一個(gè)XMLHttpRequest對(duì)象我們要針對(duì)不同的瀏覽器做許多判斷。 再舉個(gè)簡(jiǎn)單的例子: 在IE中你可以這樣訪問(wèn)一個(gè)元素document.all.,而如果在FireFox中執(zhí)行這段腳本一定會(huì)報(bào)錯(cuò)的。為了保證多瀏覽器,我們就應(yīng)該使用共有的函數(shù)document.getElementById來(lái)獲得元素。 以上這種是好的情況,不同瀏覽器有共有的函數(shù)可以使用,但是現(xiàn)實(shí)中并非都是如此有時(shí)你不可避免的要使用到分支,比如在DOM中動(dòng)態(tài)創(chuàng)建一個(gè)RADIO,就可能要這樣寫(xiě): try{ var radio = document.createElement("<input type='radio' name='userId' value='"+jsonContent.userInfoList[i].id+"'>"); }catch(e){ var radio = document.createElement("input"); radio.name="userId"; radio.type="radio"; radio.value=jsonContent.userInfoList[i].id; } Try里的代碼是為IE準(zhǔn)備的,CATCH里的代碼是為FIREFOX等準(zhǔn)備的。 以上的一些例子說(shuō)明了,JAVASCRIPT的開(kāi)發(fā)依賴(lài)于瀏覽器。也許有些牛人可以說(shuō),我可以用共有的函數(shù),或者有些地方就使用TRY,CATCH。但是我想說(shuō)的是,JAVASCRIPT身上承擔(dān)的重量大家都了解,它承載著是WEB2.0的發(fā)展。這是一個(gè)大問(wèn)題,因?yàn)槟_本代碼不可能僅由幾個(gè)牛人來(lái)開(kāi)發(fā),我們需要更多像我這樣的新手來(lái)開(kāi)發(fā),這才能推動(dòng)AJAX的發(fā)展。而JAVASCRIPT學(xué)習(xí)曲線將影響AJAX開(kāi)發(fā)的普及。之所以造成這個(gè)問(wèn)題,就是眾瀏覽器廠商沒(méi)有制定和遵循統(tǒng)一的標(biāo)準(zhǔn),僅僅支持JAVASCRIPT但是并不一定支持它的標(biāo)準(zhǔn)。沒(méi)有統(tǒng)一的標(biāo)準(zhǔn)那么JAVASCRIPT的開(kāi)發(fā)就難于順利普及,以上個(gè)人在開(kāi)發(fā)中遇到的一些情況也只能不斷的積累經(jīng)驗(yàn)。 (二) 調(diào)試依賴(lài)瀏覽器 調(diào)試是開(kāi)發(fā)中非常重要的一環(huán)我想這個(gè)大家都沒(méi)有異議,以前JAVASCRIPT只是做一些特效和校驗(yàn)?zāi)_本,但是現(xiàn)在不僅僅是這樣,JAVASCRIPT被賦予了更多的功能。面對(duì)復(fù)雜的業(yè)務(wù),使用調(diào)試器將大大提高開(kāi)發(fā)效率。但是遺憾的是,JAVASCRIPT的調(diào)試器良莠不齊,更嚴(yán)重的是調(diào)試器一樣依賴(lài)瀏覽器。IE你可以使用Sript Editor,FireFox你也許就要改用Venkman。這意味著什么,意味著你不得不為了多瀏覽器支持,去學(xué)習(xí)和熟練更多的工具。 (三) 錯(cuò)誤提示依賴(lài)瀏覽器 認(rèn)為自己的項(xiàng)目開(kāi)發(fā)完成,測(cè)試工作結(jié)束后不出問(wèn)題是天真的想法。對(duì)于JAVASCRIPT開(kāi)發(fā)而言,尤其天真。(牛人開(kāi)發(fā)的不予討論)你很難保證你的腳本在客戶(hù)的某個(gè)瀏覽器上不出現(xiàn)錯(cuò)誤,因此錯(cuò)誤提示是相當(dāng)重要的。但是令人遺憾的是,連這種簡(jiǎn)單的東西都依賴(lài)瀏覽器。IE的在腳本出錯(cuò)時(shí),左下角會(huì)有相應(yīng)的標(biāo)示,同時(shí)提供一些簡(jiǎn)單的信息(出錯(cuò)發(fā)生的行數(shù)之類(lèi)),F(xiàn)ireFox在不會(huì)有明顯的標(biāo)示,所有信息在錯(cuò)誤控制臺(tái)可以查看,提供的信息和IE差不多。這里不得不提一個(gè)瀏覽器,Sofari它往往只能告訴你腳本出錯(cuò)了,但是并不能告訴你在第幾行。如果你的客戶(hù)有Sofari的強(qiáng)硬要求,同時(shí)很不巧它又報(bào)腳本出錯(cuò)了。恭喜你,你將墜入地獄。你可能會(huì)說(shuō)把腳本放在其他瀏覽器上運(yùn)行,看看什么錯(cuò)。但是很不幸的告訴你的腳本出這些問(wèn)題時(shí),在其他瀏覽器上往往是可以完美運(yùn)行的。這時(shí)候你會(huì)發(fā)現(xiàn)JAVASCRIPT是一個(gè)多么恐怖的語(yǔ)言。 有耐心看到這里的讀者,似乎會(huì)發(fā)現(xiàn)我一直提到瀏覽器。為什么我一直抓著瀏覽器不放,因?yàn)闉g覽器是將我們的項(xiàng)目展現(xiàn)給用戶(hù)的工具,在我看來(lái)一個(gè)項(xiàng)目是否出色,不在于它運(yùn)用到了什么技術(shù),而取決于用戶(hù)獲得的體驗(yàn)?!翱蛻?hù)是我的衣食父母”這是我的口頭禪。項(xiàng)目賺錢(qián)了,并不因?yàn)锳JAX,并不因?yàn)镕LEX,只因?yàn)槟銤M(mǎn)足了客戶(hù)的需求。客戶(hù)是第一驅(qū)動(dòng)力,一次兩次你可以要求客戶(hù)只使用IE6,但是長(zhǎng)此以往不是辦法?,F(xiàn)在已經(jīng)不是IE6擁有90%市場(chǎng)的時(shí)代了(當(dāng)然同樣的IE6 SP1版和SP2版也有不同,曾經(jīng)遇到過(guò)問(wèn)題),現(xiàn)在國(guó)內(nèi)用戶(hù)用的瀏覽器有:Ie5,Ie6,Ie7,FireFox,MyIe,TT等,你沒(méi)有理由叫客戶(hù)換瀏覽器。而且隨著對(duì)盜版的打擊日漸嚴(yán)厲,Ie7將逐漸取代Ie6。舉個(gè)簡(jiǎn)單的例子,客戶(hù)剛買(mǎi)了個(gè)本子,預(yù)裝了正版的VISTA,他會(huì)為了你的程序去裝其他的瀏覽器?如果你的程序不支持IE7顯然你失去了這個(gè)客戶(hù)。 現(xiàn)在這個(gè)問(wèn)題還不是非常嚴(yán)重,但是可以預(yù)見(jiàn)不久的未來(lái),這些問(wèn)題將會(huì)日益加劇。一個(gè)菜鳥(niǎo)能做的就是看到一些問(wèn)題,如何解決,亦或只是杞人憂(yōu)天還請(qǐng)牛人指教了。 該文章在 2010/8/18 21:23:01 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |