我不知道如何彈出窗口的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