簡短版本: 尋找等待異步XHR請求的方法或獲得Synch XHR在Safari中工作的方法。Javascript Synchronous XMLHttpRequest的替代品(在Safari中超時)
更長的版本: 我正在使用各種外部數據源混合在一起的Web服務。我正在使用一個JavaScript前端,它可以對我的PHP服務器代碼進行AJAX/XHR調用。沒有跨站點問題,因爲客戶端只向我的服務器請求數據(服務器發出外部數據請求)。
我使用的是同步XHR請求,因爲我有一些後加載處理(排序,過濾等)在數據顯示在屏幕上之前做的。
這一切都適用於IE瀏覽器,FF和Opera,但似乎是Safari的問題(我還沒有嘗試Chrome)。
在Windows機器上使用Firebug for Safari我可以看到服務器調用了beng,然後在10秒以上的時間後失敗。在我的iPad上,該消息略微有點像以下所示:NETWORK_ERR:XMLHttpRequest異常101:在同步模式下發生網絡錯誤。
一些研究表明,Safari會在同步模式下10秒後超時。似乎有一個超時功能,您可以使用該超時功能來擴展此功能(對於60秒的Safari最大限制)。不幸的是我無法得到這個工作。
我現在想知道人們會通過改變客戶端Javacript代碼來解決這個問題。
我在考慮的兩個選項是(i)找到Safari瀏覽器將會遵守的同步XHR超時的工作示例;或者(ii)圍繞異步XHR呼叫進行某種包裝,以便後裝處理首先等待負載。
我不是一個經驗豐富的Javascript黑客,但我在這個項目上設置了相當數量。我沒有使用JQuery或任何其他框架,寧願保留原始JS,以避免學習其他語法。 [你可能會從我以前的帖子中看到我過去嘗試過使用JQM和Spry,但都被證明是錯誤的選擇,至少在現階段已經被拋棄了]。
我感覺回調可能是正確的等待選項,但我不確定這是如何工作的,或者如何編寫它。
這只是在這個階段的原型,所以骯髒的黑客是可以接受的。一旦我已經證明了功能,完整的重寫已經在卡片上。
欣賞人們對此的想法和建議。
Regards, Pete。
我不會對這個具體問題有很大幫助,因爲它的自從我寫了一本「老派」AJAX電話以來一直是永遠的。 我肯定你會重新訪問jQuery - 如果不是現在,很快。您可以在幾行中通過多個瀏覽器一次又一次地測試複雜的AJAX調用。我曾經拒絕學習jQuery,但現在我意識到這是一個錯誤。所有這些都值得花時間學習單獨的強大,更穩定(更易於使用)的AJAX調用。 – CWSpear 2012-04-09 16:56:26
嗨@Volkner。我認爲jQuery在不久的將來可能會是明智的選擇,但如果是poss,我更願意使用JS的原始解決方法。這是一個優先事項,我渴望儘快讓我的原型原型工作,並儘可能避免花時間學習其他/替代品。 – 2012-04-09 17:11:10