2013-05-30 22 views
0

我有以下Ajax登錄腳本。 index.php將設置會話,然後返回類似{"status":true,"msgs":[],"url":"\/demo\/administrator\/index.php"}的內容,如果用戶名和密碼檢出。然後頁面應該重新加載,PHP腳本將檢查會話是否已設置,如果是,將顯示相應的頁面。頁面重新加載但未命中服務器

「有時」在Windows 7上運行FireFox 21.0時,頁面似乎重新加載,但之後不正確地重新顯示登錄頁面。當我說「似乎重新加載」時,使用FireBug時,我看到POST到服務器,然後我看到console.log「重新加載頁面」一段時間,然後顯示登錄頁面。如果我手動重新加載頁面,會話將檢出,並返回正確的頁面。

爲了排除故障,我在我的PHP腳本中放了一些syslog(LOG_INFO,"got here!");,我發現它再也沒有被訪問過,因此我相信服務器在重裝後沒有被擊中。我也檢查了Apache訪問日誌,我相信它只能看到第一個POST。

任何人都可以讓我知道發生了什麼,以及如何補救?謝謝

$.post('index.php',{task:'logon',username:username,password:password}, 
    function (data) 
    { 
     if(data.status==true){ 
      console.log('reload page'); 
      //window.location.href = data.url; 
      window.location.href = window.location.href; 
      //window.location.reload(); 
     } 
     else {msgs.html("<ul>"+mkList(data.msgs)+"</ul>");} 
    },'json' 
); 
+0

,如果你改變'window.location.href = window.location.href'到'window.location.reload()'會發生什麼?我不確定它是否有所作爲,但也許瀏覽器實際上並沒有發送請求,因爲'href'值沒有改變? –

+0

@Brian。同樣的效果。我甚至返回網址的唯一原因是我可以測試'window.location.href = data.url;' – user1032531

+1

由於某種原因它是否緩存?您從POST請求獲得什麼狀態?另外,也許嘗試'window.location.reload(true)'看看是否有所作爲。 –

回答

2

這個答案真的被布賴恩拉齊和user1600124提供,但他們只剩意見,並沒有張貼這個答案。所以,如果你認爲這是一個很好的答案,請給他們的評論投票。

使用window.location.reload(true)提交數據到服務器

如果不明確地告訴瀏覽器不緩存的網頁標題..有些瀏覽器仍然會高速緩存動態頁面,因爲您發送的參數是一樣的。

作爲一種替代解決方案,您可以向url添加一個時間戳,以強制瀏覽器再次從服務器獲取內容。

+0

'location.reload(true)'適合我。謝謝 :) – seal

相關問題