2011-11-05 60 views
0

編輯:我有一個問題,使用從iframe模式框使用jquery的父頁面上重新加載div。回調函數無法正常工作:jquery .load()

父頁上有什麼? - 一個名爲「#hidden」的div加載了一個名爲「getcontent.php」的單獨的php頁面

Iframe模式框是什麼? - 只是一個表格。在表單提交後,我將進入一個提交頁面,在那裏我會在數據庫中進行所有更新。畢竟該更新完成,然後我對關閉模式對話框並刷新DIV功能來在iframe

這裏面是我的代碼:

$(document).ready(function() { 
    $('#hidden').load('getcontent.php'); 
    parent.$.fallr('hide', function(){ 
    }); 
}); 

我希望這個代碼的)刷新DIV #在父頁面隱藏和b)關閉我的模式框。到目前爲止關閉模式框完美地工作!刷新DIV不

+0

也許我應該從.load中刪除函數應該可以工作 – drummer392

回答

1

在你的回調函數創建了另一個功能,但是你不對它做任何事。它被創建並丟棄。如果你刪除最內層的功能,我猜它會工作加載對你更好:

parent.$.fallr('hide', function(){ 
    $('#hidden').load(
     'admin/getcontent.php', 
     { pageID : "<? echo $_REQUEST['pageID']; ?>" } 
    ); 
}); 

可能也失敗的原因查詢字符串。不知道它是否能夠正確編碼。但是,如果將它放入數據參數中,它應該這樣做。往上看。所以,現在我們已經得到了一個更清晰的解釋,並且擺脫了額外的函數和查詢字符串(後者可能正常工作),我們可以繼續前進。

使用當前代碼,您要求對話框上的#hidden div加載內容。但是對話框中沒有#hidden div,它在父級上。用父母前綴。會解決這個問題,但我們也有另一個問題。我們告訴對話框在對話框加載後立即刷新div。這不是我們想要的。我們希望在關閉對話框時刷新它,對嗎?所以將它移入fallr回調應該可以解決這個問題。這應該在父母的情況下運行,所以沒有父母。需要前綴。

$(document).ready(function() { 
    parent.$.fallr('hide', function(){ 
     $('#hidden').load('getcontent.php'); 
    }); 
}); 

但是,這或多或少是我們早些時候曾是造成與上下文不存在任何更多的問題。

所以,對我來說,問題是你正試圖與孩子的父母做事。在我看來,父母應該是一個做事的人。因此,當對話框是準備要關閉它應該調用父設備上的功能,將關閉對話框,並進行自我更新:

//From an event on the dialog 
parent.closeDialogAndRefresh(); 

//On the parent define it 
function closeDialogAndRefresh() { 
    $.fallr('hide'); 
    $('#hidden').load('getcontent.php'); 
} 

如果不起作用。嘗試啓動一個定時器,它會在50ms後調用closeDialogAndRefresh或類似的東西。

真正的問題在這裏我認爲是你使用IFrames而不是浮動div從一些體面的UI框架。希望你能得到你想去的地方。

+0

不知道你爲什麼要發送該PHP代碼作爲參數。你不應該在你的請求中指定一個ID,並讓服務器爲它找到正確的頁面或類似的東西? – Mithon

+0

好的。你知道它破裂的地方嗎?你的請求是否曾經開火?它是否到達服務器?它是否回到客戶端,但在那裏失敗?嘗試添加成功和錯誤處理程序,並看看他們給你什麼。使用chrome/ff開發。工具來查看控制檯和網絡中的情況。 – Mithon

+0

這是否意味着你的fallr hide隱藏了一個包含#hidden標籤的對話框?如果是這樣,那麼當對話中的負載回調踢出時最好是隱藏的,最壞的情況是已經被銷燬。如果這是與錯誤信息一致的情況,我相信。 – Mithon

1

你有一個functinception有:

parent.$.fallr('hide', function(){ 
    function(){ 
+0

你是什麼意思。我應該在其他地方定義函數,然後像這樣調用函數嗎? – drummer392