我觸發通過JavaScript頁面重新加載,使用下列內容:刷新頁面:避免「回傳」警告
window.location.reload(true);
然而,在某些情況下(上回發的),瀏覽器是給我會收到以下警告:「要再次顯示網頁,網絡瀏覽器需要重新發送您之前提交的信息......」。
有沒有什麼辦法可以避免這個消息,只是做回發,因爲這可能會讓用戶感到困惑?如果我需要通過另一種方式重新加載頁面,那就這樣吧。
我觸發通過JavaScript頁面重新加載,使用下列內容:刷新頁面:避免「回傳」警告
window.location.reload(true);
然而,在某些情況下(上回發的),瀏覽器是給我會收到以下警告:「要再次顯示網頁,網絡瀏覽器需要重新發送您之前提交的信息......」。
有沒有什麼辦法可以避免這個消息,只是做回發,因爲這可能會讓用戶感到困惑?如果我需要通過另一種方式重新加載頁面,那就這樣吧。
我不認爲有沒有辦法做回發沒有消息,當你正在重新加載。
順便說一句,什麼是重裝?如果是再次提交POST信息,我建議你手動提交數據通過ajax或隱藏表單提交使用JavaScript。
重新加載用於顯示更新的數據,也用於保存狀態數據(例如,當用戶在頁面上設置過濾器時,我想在重新加載時保持該過濾器活動) – Sam 2010-09-08 09:43:49
因此,如果您不想發送將POST數據再次發送到服務器(這是我從上面的回覆中理解的),在POST數據在服務器端腳本中處理後,將303/302重定向到視圖頁面。如果你這樣做,你可以做同樣的JavaScript重新加載你沒有任何問題的東西。請參閱此處以獲取POST重定向解決方案的解釋。 http://www.ajaxray.com/blog/2008/01/12/how-to-avoid-postdata-resend-warning/ – mays 2010-09-08 10:03:34
感謝您的評論,我猜測有條件地做302的唯一方法是那麼服務器端,還是有什麼辦法通過JavaScript做到這一點? – Sam 2010-09-08 10:48:23
唯一的辦法就是阻止它恢復params。使用 window.location = window.location
但是,當轉換爲GET時(我相信),這會丟失POST數據。 – jensgram 2010-09-08 09:11:15
您要重試的請求是POST
請求,因此是警告。您可以確保只重新加載通過GET
請求獲取的資源,或者 - 通過POST
方法提交隱藏的<form>
(並因此模擬保證不會被緩存的重新加載)。
正如您可能已經知道警告必須處理HTTP動詞中的idempotence(缺乏副作用)。 GET
(其中包括)(至少應該)被認爲是冪等的,而POST
請求允許在服務器上進行更改。因此,客戶應該提示用戶確認他/他打算再次執行該操作。
在頁面中保存狀態數據的一種方法是在URL上使用片段標識符,例如。 #filter1,#filter2,然後使用便捷的hashchange插件爲jQuery執行代碼(即,通過onhashchange事件更改url片段時更新新頁面的相關部分)。這也很好,因爲不同的狀態可以被添加書籤和緩存。
如果要刷新頁面,而不包括POST數據,而不只是回傳嘗試
window.location = window.location.href;
後:
mysql_query("insert into table (id_item, quantity, cost) values($m, '$amount', '$cost')");
地說:
header("Location: index.php");
然後用jquery重新加載你的頁面,並且你不會得到「... web瀏覽器需要重發信息...」的警告。
編輯:最後,我通過不做回發來解決問題,而是通過客戶端重定向,並使用Jquery查詢插件向查詢字符串添加必要的參數。 – Sam 2011-04-22 09:41:52