我不知道如何弹出窗口的DOM树和它们从opener窗口的操作工作。什么是正确的方式来实现我想要做的事情(如下所述)?如何用AJAX请求替换弹出窗口的内容?
我有一个正常的浏览器窗口,其中JavaScript函数收集所选元素并从中创建POST数据字符串。 然后我打开一个带有占位符内容的弹出窗口,将一个函数绑定到执行AJAX请求的window.ready,然后尝试用AJAX结果替换弹出窗口中的HTML。
在代码中,这是在JavaScript中运行的开启器窗口:。
function showMessages(queryParams, width, height) {
var mailWindow = window.open('html/blankwithdoctype.html', 'foo', 'resizable=yes,scrollbars=yes,height='+height+',width='+width);
var params = queryParams.substring(1);
$(mailWindow.document).ready(function() {
doPostRequest(params, mailWindow);
});
return mailWindow;
}
function doPostRequest(queryParams, mailWindow) {
function callback(data, textStatus) {
var mv = mailWindow;
$(mv.document).find("html").html(data);
};
$.post('MailFile.do', queryParams, callback);
}
当$(mv.document).find("html").html(data);
与Chrome开发者工具或Firefox +萤火打破,我注意到,暂时结果显示,但JQuery的调用栈展开($.post('MailFile.do', queryParams, callback);
后)后,再一次显示的原始空白页。
如果没有调试器,我注意到结果页面的渲染至少已经启动,但它很快被原始占位符页面替换。
有趣的是肯定会在这里。
不加载jQuery库不是问题的根源。我原来的问题没有解释,所有这些操作都是在opener窗口中完成的,因此在打开的窗口中缺少JQuery应该不成问题。 – Eonwe 2009-11-20 10:00:12
我意识到这一点。但是,如果我没有弄错,传递给打开窗口的'ready()'的匿名函数会在打开的窗口的全局上下文中执行。这就是为什么我认为可能存在可视性问题。你真的尝试过了吗?可能是因为关闭,'$'可见,但是,我不太确定。 – 2009-11-20 11:21:29