2012-05-04 40 views
1

週三AJAXy CRM系統我保持打破了很多用戶,因爲火狐開始報告「XMLHttpRequest的超時屬性的使用在窗口背景下的同步模式,不支持」。其他主流瀏覽器仍然正常工作,因此我建議人們不要使用Firefox。如何看待不同的瀏覽器處理暫停時以同步XHR

從我的理解同步請求是壞事,所以我只能假設最近的一些更新到Firefox已經從容納糟糕事情停止它。以前的所有討論(在這裏和網絡上)暗示了在同步的時候使用timeout屬性XMLHttpRequest對象根本不應該工作,這導致我想知道爲什麼它顯然會這樣做(除了截至週三的Firefox)。

是其他瀏覽器/ Firefox的老實際執行超時行爲,他們「不應該」,還是僅僅忽略異常並繼續執行(而不是像新的Firefox想逃出來)?

編輯:我不能去的代碼,但現在它是沿着線: if (c.somekindoftimeouthandler !== "unassigned" && this.timeout) {
c.timeout = this.timeout
//more stuff about the handler etc...
}
哪裏「這個」又是從何而來的XMLHTTPRequest和「C」想必繼承了複雜的是特定對象指特定的AJAX請求或其他。我會乾淨的,我對JavaScript和這個特定的基於Sugar的CRM都知之甚少,但代碼的本質很簡單。這是一種通用的面向對象的方式來提出請求,並且當請求超時時,這個特定的4行或多行將被處理。我覺得這是一個抽象的基礎,特定的請求(或請求實體)應該專注於這個抽象基礎。 Firefox的Javascript引擎窒息在this.timeout

我相信我的質詢主要是更普遍的,雖然 - 定的使用超時同步XHR的「不良」,怎麼辦各種瀏覽器處理呢?

+0

請顯示失敗的代碼。如果沒有,黑暗中會有很多鏡頭。 – JotaBe

回答

3

IE允許'超時'爲同步XHR工作。如果達到超時時間,我相信它會從send()中拋出一個異常。

Firefox的實施正是XHR規範說:超時支持異步XHR但不支持同步XHR(如果你嘗試設置它拋出)。

其他瀏覽器(和舊的Firefox)根本不支持超時;他們甚至沒有財產。由於您的腳本正在嗅探該屬性是否存在,因此它甚至不會嘗試在其他瀏覽器中設置超時,這就是爲什麼它在那裏工作的原因:腳本沒有試圖做壞事,因此這些瀏覽器不會結束拋出異常。

於是一切都變了的是火狐增加了對超時屬性,但是在做IE做什麼它實現什麼樣的規範說的事情。而你的腳本假設任何實現該屬性的瀏覽器都會像IE那樣行爲......

+0

完美全面的答案。現在我知道我可以在不破壞預先存在的功能的情況下刪除有問題的代碼。 – benxyzzy