[英]AJAX Insert HTML with jquery opens infinite loop of new tabs
当从我的“关于”菜单(第 1 页)中选择菜单选项时,我正尝试使用 AJAX 打开基于 html 模板的新选项卡(第 2 页)。 因此,“第 1 页”打开“第 2 页”,该函数将代码插入“第 2 页”。 “关于”菜单是一个导航栏无序列表。
我编写的代码访问了一个预先发布的谷歌文档。 我只是想将文档插入模板中的一个部分。
我已经检查了所有中间步骤。 没有错误,文档以 HTML 字符串形式返回。
第一个函数,menuClick:
function menuClick(doclink) {
window.open(
"AboutTemplate.html", "_blank");
inject_to = $("content");
load_from = "AboutTemplate.html";
d = loadDoc(doclink, inject_to, load_from); }
第二个函数,loadDoc:
function loadDoc(doclink, inject_to, load_from) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
d = this.responseText;
console.log("Inside loadDoc")
console.log (inject_to + ", " + load_from)
console.log("-----------------------------")
console.log(d)
$.get(load_from, d, function(d) {
inject_to.html(d);
})
}
}
xhttp.open("GET", doclink, true);
xhttp.send();}
最后,事件处理程序,它引用菜单 ID 'AboutPages':
$('AboutPages').click(menuClick())
当启动这段代码时,它进入一个循环:
正如我所说,我已经确认所有内容都以正确的形式从谷歌文档返回。 这就是控制台日志语句要识别的内容。 我把它们包括在内是因为我想知道我的顺序是否不正确?
更新我已经修复了打开多个选项卡的循环。 事件处理程序所做的事情与我包含在每个 LI 元素中的“onclick”事件相同。 所以,我已经消除了事件处理程序。
我还重新验证了 Google 文档正在返回一个 HTML 字符串。 这是。 所以,我明白了。 我只是无法确定将其插入新打开页面的正确方法。
我试过这个,但没有用:
var p = window.open(load_from,"_blank")
和
p.getElementById('contents') = loadDoc(doclink, inject_to, load_from)
当我尝试将新打开的页面作为它自己的变量进行标注时,它不会让我访问任何与正常打开窗口相关的属性。
尝试删除括号,不要就地调用您的处理程序,而是作为参数传入:
$('AboutPages').click(menuClick())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.