IE7中使用AJAX遇到的一個問題

來源:互聯網
上載者:User

        最近在做網站的時候用到了一個大檔案上傳的功能,也就是說通過INPUT 的檔案上傳表單元素,支援上傳任意大小位元組的檔案,同時在瀏覽器上顯示上傳進度。服務端就是利用HttpWorkRequest類,同網上其它大檔案上傳的原理是一樣的。

        用戶端是在調用form的submit方法之後,再用AJAX方式從伺服器上取得當前上傳的進度資訊,這種方式在IE6和FF下都沒有問題。因為自己家裡和工作的電腦都沒有裝IE7,所以就沒有在IE7下面測過。

        前幾天在朋友有電腦上發現在IE7下,表單提交之後進度條資訊沒法顯示了。一開始以為是服務端返回進度資訊的handler有問題,調試了一下服務端發現能正常擷取到進度資訊,說明服務端是沒有什麼問題的;後來又以為是JS指令碼被改動了,仔細的檢查了代碼後又在IE6和FF下複測了,結果是IE6和FF仍然是好的,而且JS代碼也沒有動過。為這事我專門在機子上裝了IE7進行單步調試,最終發現原因在於submit之後調用AJAX能夠執行到send方法,但是在表單沒有完全提交之前,永遠也不會調用回呼函數。

        回想之前調試服務端的時候,擷取到的檔案上傳進度的資訊都是99%,100%之類的。當時還以為是用的上傳檔案不是太大,又都是在本機調試,很快就上傳完了的原因。現在看來問題就是出在這了,貌似IE7裡面submit和AJAX請求用的是同一個TCP串連,要不然就是submit的時候AJAX被阻塞了(反正現象都一樣,也沒有深究),表單提交完了的時候才執行的,沒有調用回呼函數當然也就不會更新瀏覽器的進度資訊了。

        現在想想除了我在提交表單的時候用的是form的submit的方法,而不是用的submit的表單元素外,沒有什麼特別之處了(周一再去檢驗這個猜想)。最離奇的是IE6和FF都過了,唯獨IE7過不了。google了一把,好像還沒有發現跟我有同樣現象的。本人自認為人品還是很不錯的。。。鬱悶.

       今天難得有點時間,整理了一下以前留下的遺留問題,忽然發現這個IE7下面不能更新進度條的問題不再發生了,以前的N個網站都能夠正常重新整理進度,而相應的JS代碼一直都沒有改過,果真是RPWT,還是MS在新的補丁裡面解決了這個問題?現在看來也不得而知了,從去年到今年,IE7已經打過N個補丁了,只有哪天重新系統的時候剛裝完IE7的時候再來驗證一下才會知道。不過倒是發現了另外一個以前沒有注意到的地方,原來IE7也開始支援Native HttpXmlRequest了,也就是說在建立非同步請求的對象執行個體的時候代碼可以和FF一樣直接new,但是看網上好多人提到貌似與以前的ActiveX方式建立的對象有不小的區別,具體用的時候會發生一些莫名其妙的問題。所以以前網上比較流行的跨瀏覽器的建立對象方式一上來就new HttpXmlRequest,失敗了再去用ActiveX方式建立的過程得改一改了,把new HttpXmlRequest放到最後一種情況來判斷。這個樣以優先應用以前的ActiveX方式的對象。至於IE7中用new HttpXmlRequest方式建立的非同步請求的對象嘛,暫時就不用考慮了,畢竟才剛出來,還不是行成熟。就算是要相容,也得先把JS指令碼爭對IE7做個最佳化才行

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.