我們使用具有JsonP機制的動態腳本標記來實現跨域Ajax調用。前端小部件非常簡單。它只是調用搜索Web服務,傳遞用戶提供的搜索條件並接收並動態呈現結果。如何防止IE緩存導致重複的Ajax請求?
注意 - 對於那些不熟悉的動態腳本標籤與執行類似Ajax的請求到服務的JSONP方法返回JSON格式的數據,我可以解釋如何利用它,如果你認爲它可能與問題有關。
該服務是WCF託管在IIS上。這是Restful,所以當用戶點擊搜索時我們做的第一件事就是生成一個包含條件的Url。它看起來像這樣...
然後,我們使用動態創建的HTML腳本代碼設置到上述網址的來源屬性,使要求我們的服務。結果返回,我們處理它以顯示結果。
這一切工作正常,但我們注意到,當使用IE服務收到來自客戶端的請求兩次。我用小提琴手來監視流量離開瀏覽器果然我看到兩個請求與以下網址...
- 請求1:https://.../service.svc?criteria=john+smith
- 請求2:https://.../service.svc?criteria=john+smith&_=123456789
第二個請求已附加了某種Id。每個請求的Id都不相同。
我的直接想法是它與緩存有關。在網址末尾添加隨機數是禁用瀏覽器緩存的經典方法之一。爲了證明這一點,我調整了IE中的緩存設置。
我將「檢查更新版本的存儲頁面」設置爲「從不」 - 這導致每次只產生一個請求。結尾有隨機數的那個。
我將此設置值重新設置爲默認值「自動」,並且請求立即開始再次發送兩次。
有趣的是,我沒有收到客戶的兩個請求。我發現這reference有人建議這可能是一個與IE瀏覽器的錯誤。 Firefox上這種情況不會發生,這一事實支持這一理論。
- 任何人都可以確認這是否與IE瀏覽器的錯誤?這可能是設計。
- 有誰知道我可以阻止它發生的一種方式嗎?
我的用戶運行的一些比較模糊的搜索佔用了足夠的處理資源,使任何一個非常糟糕的想法翻倍。我真的想避免這種情況,如果在所有可能:-)
對於我來說,看起來像是一個非常好的開始。如果事實證明有幫助,我會盡快接受。感謝您及時的回覆! – 2009-06-05 15:16:50