2011-11-22 51 views
0

我有一個問題。我有一個頁面,當你點擊一個按鈕時,會彈出一個窗體。所以,我完成了一些數據並提交。我想要做的是提交表單,關閉表單並刷新父頁面。我不想用AJAX來做。PHP和window.close在JavaScript中

問題是,在我的父頁面,我不得不刷新與表單的輸入信息的內容。

所以當我刷新時,有時會顯示數據,有時候不會。你知道爲什麼會發生這種情況嗎?

我只是在我的表格中使用onsubmit="refreshParent()"。信息總是存儲在我的數據庫中,所以我認爲問題可能是有時刷新會捕獲新信息,有時候不會。

function refreshParent() {  
    window.opener.location.reload(); 
    window.close(); 
} 
+1

我沒有看到這與當前編寫的PHP有什麼關係,也沒有提供的最小JavaScript代碼真的幫助我們排除任何問題。 – ceejayoz

+0

我認爲這可能會發生,因爲客戶端上的事件在發送到服務器之前觸發,但行爲最終將在這種情況下是異步的。也許你想在彈出窗體上更改表單,以返回確認數據已保存的內容,並且只有當您確認發生了成功的帖子時,纔會在此表單加載時更改您的refreshParent函數。 – MilkyWayJoe

回答

1

在執行插入的腳本和重裝父代的腳本之間存在爭用條件。

解決方法是在提交後在頁面上調用refreshParent - 這樣您就知道數據在數據庫中。您甚至不必在文檔準備就緒的情況下執行此操作 - 返回剛定義並在頭標記中調用refreshParent的存根頁面。

+0

這幾乎是我說的..應該寫作答案..投票上 – MilkyWayJoe

0

在PHP當您運行腳本後,到了最後,包括此代碼:

echo '<html><script language="javascript"> 
     parent.location.href="http://'.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"].'"; // or any other url 
     </script></html>'; 

這將輸出JavaScript代碼將刷新窗口。

2

我使用它來重新加載打開一個彈出窗口的頁面:

<script language="JavaScript"> 
<!-- 
function reloadParentPage() { 
    window.opener.location.href = window.opener.location.href; 
    if (window.opener.progressWindow) { 
     window.opener.progressWindow.close() 
    } 
    window.close(); 
} 
//--> 
</script> 

順便說,上面的代碼是通過在彈出的頁面中的鏈接或按鈕調用。

+0

謝謝,我解決了它使用ajax和這個函數 –

+0

@MaximilianoPoggio:很高興有幫助!只是一件事..你介意分享你如何得到Ajax來幫助你用JavaScript重新加載頁面獲得結果嗎? :) – Nonym