2011-11-05 117 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