如何在jQuery UI对话框关闭时重新加载父页面?

时间:2013-01-17 08:40:43

标签: jquery jquery-ui-dialog page-refresh

我在stackoverflow中搜索了这个问题并且看到了类似的问题(但不完全是我正在寻找的),但解决方案似乎不起作用。我只是jQuery的新手,我需要你的帮助才能做到这一点。 (交叉手指)

所以我有一个带按钮的网页(例如,parentPage.html)。单击该按钮(执行openItemPopup函数)时,它将使用jQuery UI打开模式对话框。模态对话框“#contentWindow”的内容是一个不同的页面(例如modalDialog.html)。


function resetContent() {
$('#contentFrame').attr('src', '/images/ajax-loader.gif');
}

function closeContent() {
$('.ui-dialog-titlebar-close').click();
}

function openItemPopup(){

$('#contentWindow').dialog({width:980, modal: true,
        close: function(ev, ui) { resetContent(); }
});
}

在modalDialog.html中,当单击一个锚点时,它会执行一些逻辑,并且需要动态关闭模态对话框。有人告诉我使用它,这已经有效了:


              // refresh parent page before closing
              // doesn't work
              location.reload(true);

              // close the modal dialog
              window.top.closeContent();
              return false;
              window.location='javascript:void();';

我的问题是:我需要在关闭模式对话框之前刷新parentPage.html。您在上面看到我尝试使用location.reload(true);,但它重新加载模式对话框而不是parentPage.html。我无法发布图片,但它说* “无效的Web应用程序会话” *

我也试过了window.top.location.reload();它似乎工作。它重新加载parentPage.html并关闭模式对话框。

              // refresh parent page before closing
              // seems working but has error
              window.top.location.reload();

              // close the modal dialog
              window.top.closeContent();
              return false;
              window.location='javascript:void();';

然而,它说“无效的Web应用程序会话。” - 就像使用location.reload(true);时的情况一样。我不知道为什么会这样,以及如何解决它。我甚至不确定window.top.location.reload是否是正确的方法。

FYI:我正在尝试刷新parentPage.html,以便能够从模式对话框中获取数据。之前,modalDialog.html曾用作简单的html页面。列表和字段等数据从modalDialog.html正确返回到parentPage.html。他们想将其转换为模态对话框,以防止大量页面刷新。有人告诉我,可以使用AJAX,但这是很多工作。此外,我不是主人。如果您有更好的建议,请随时告诉我们!

我希望你能帮助我解决这个问题。在此先感谢!!!

2 个答案:

答案 0 :(得分:5)

在您对话框中使用close: function (ev, ui) { window.location.reload() }

答案 1 :(得分:2)

试试这个:在你的parentPage.html中添加一个新功能:

function reloadContent() {
    location.reload();
}

在modalDialog.html中通过以下方式调用函数:

parent.reloadContent();