JavaScript能否撐起AJAX的未來
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
初聞AJAX是06年的春天,當時對AJAX的記憶,就是荷蘭那只充滿的潛力的球隊。如今此AJAX就如同彼AJAX一樣,令人驚艷,異步更新使得許多桌面軟件的效果可以在WEB上實現,AJAX也成為了WEB2.0的主要標志。
雖然AJAX越來越流行,但是我難免不為其潑點冷水,結合自身的經驗我認為目前AJAX開發有以下幾個問題,這些問題將可能成為束縛其發展。 在提出問題之前,我想有必要闡述兩個觀點:1.異步更新的方向是正確的 2 我的評論只涉及javaScript。 目前JAVASCRIPT開發面臨的最大問題就是依賴瀏覽器: (一) 語法及函數依賴瀏覽器 以下這段代碼大家應該熟悉 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);}這只是簡單的例子,為了生成一個XMLHttpRequest對象我們要針對不同的瀏覽器做許多判斷。 再舉個簡單的例子: 在IE中你可以這樣訪問一個元素document.all.,而如果在FireFox中執行這段腳本一定會報錯的。為了保證多瀏覽器,我們就應該使用共有的函數document.getElementById來獲得元素。 以上這種是好的情況,不同瀏覽器有共有的函數可以使用,但是現實中并非都是如此有時你不可避免的要使用到分支,比如在DOM中動態創建一個RADIO,就可能要這樣寫: 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準備的,CATCH里的代碼是為FIREFOX等準備的。 以上的一些例子說明了,JAVASCRIPT的開發依賴于瀏覽器。也許有些牛人可以說,我可以用共有的函數,或者有些地方就使用TRY,CATCH。但是我想說的是,JAVASCRIPT身上承擔的重量大家都了解,它承載著是WEB2.0的發展。這是一個大問題,因為腳本代碼不可能僅由幾個牛人來開發,我們需要更多像我這樣的新手來開發,這才能推動AJAX的發展。而JAVASCRIPT學習曲線將影響AJAX開發的普及。之所以造成這個問題,就是眾瀏覽器廠商沒有制定和遵循統一的標準,僅僅支持JAVASCRIPT但是并不一定支持它的標準。沒有統一的標準那么JAVASCRIPT的開發就難于順利普及,以上個人在開發中遇到的一些情況也只能不斷的積累經驗。 (二) 調試依賴瀏覽器 調試是開發中非常重要的一環我想這個大家都沒有異議,以前JAVASCRIPT只是做一些特效和校驗腳本,但是現在不僅僅是這樣,JAVASCRIPT被賦予了更多的功能。面對復雜的業務,使用調試器將大大提高開發效率。但是遺憾的是,JAVASCRIPT的調試器良莠不齊,更嚴重的是調試器一樣依賴瀏覽器。IE你可以使用Sript Editor,FireFox你也許就要改用Venkman。這意味著什么,意味著你不得不為了多瀏覽器支持,去學習和熟練更多的工具。 (三) 錯誤提示依賴瀏覽器 認為自己的項目開發完成,測試工作結束后不出問題是天真的想法。對于JAVASCRIPT開發而言,尤其天真。(牛人開發的不予討論)你很難保證你的腳本在客戶的某個瀏覽器上不出現錯誤,因此錯誤提示是相當重要的。但是令人遺憾的是,連這種簡單的東西都依賴瀏覽器。IE的在腳本出錯時,左下角會有相應的標示,同時提供一些簡單的信息(出錯發生的行數之類),FireFox在不會有明顯的標示,所有信息在錯誤控制臺可以查看,提供的信息和IE差不多。這里不得不提一個瀏覽器,Sofari它往往只能告訴你腳本出錯了,但是并不能告訴你在第幾行。如果你的客戶有Sofari的強硬要求,同時很不巧它又報腳本出錯了。恭喜你,你將墜入地獄。你可能會說把腳本放在其他瀏覽器上運行,看看什么錯。但是很不幸的告訴你的腳本出這些問題時,在其他瀏覽器上往往是可以完美運行的。這時候你會發現JAVASCRIPT是一個多么恐怖的語言。 有耐心看到這里的讀者,似乎會發現我一直提到瀏覽器。為什么我一直抓著瀏覽器不放,因為瀏覽器是將我們的項目展現給用戶的工具,在我看來一個項目是否出色,不在于它運用到了什么技術,而取決于用戶獲得的體驗。“客戶是我的衣食父母”這是我的口頭禪。項目賺錢了,并不因為AJAX,并不因為FLEX,只因為你滿足了客戶的需求。客戶是第一驅動力,一次兩次你可以要求客戶只使用IE6,但是長此以往不是辦法。現在已經不是IE6擁有90%市場的時代了(當然同樣的IE6 SP1版和SP2版也有不同,曾經遇到過問題),現在國內用戶用的瀏覽器有:Ie5,Ie6,Ie7,FireFox,MyIe,TT等,你沒有理由叫客戶換瀏覽器。而且隨著對盜版的打擊日漸嚴厲,Ie7將逐漸取代Ie6。舉個簡單的例子,客戶剛買了個本子,預裝了正版的VISTA,他會為了你的程序去裝其他的瀏覽器?如果你的程序不支持IE7顯然你失去了這個客戶。 現在這個問題還不是非常嚴重,但是可以預見不久的未來,這些問題將會日益加劇。一個菜鳥能做的就是看到一些問題,如何解決,亦或只是杞人憂天還請牛人指教了。 該文章在 2010/8/18 21:23:01 編輯過 |
關鍵字查詢
相關文章
正在查詢... |