gpt4 book ai didi

javascript - 即 : why isn't AJAX resulting HTML updated in DOM?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:38:34 25 4
gpt4 key购买 nike

我正在通过 ajax 将 html 内容加载到 div 上(使用 mootools 1.11 和 squeezebox,如果重要的话)。
在我加载的内容中,我有一些 JS 可以操纵一些加载的 HTML 对象。
在 FF 中一切正常,但是当我在 IE 中加载它时(目前在 IE7 上测试)代码失败并显示“'null' is null or not an object.
快速测试显示 AJAX 加载的新元素不在 IE DOM 中。加载了一个 ID 为“test”的 div,当我运行 document.getElementById('test') 时,我得到了 null。不用说,在原始元素上运行 getElementById 效果很好。

有谁知道如何解决/解决这个问题?

更多信息:我将我的代码放在“domready”窗口中。尝试使用“加载”事件,但 IE 从未调用它。

更新
按照建议,我在 IE8 上检查了相同的脚本,它具有更好的调试能力。
看来问题确实出在时机上。我在 Windows 的 domReady 上运行我的代码,它似乎立即运行,而没有真正等待 DOM 准备就绪(在弹出窗口中)。使用调试器运行相同的脚本,一旦整个页面加载完毕,就可以毫无问题地定位元素。
所以我想现在的问题是如何让脚本在合适的时间运行。

  • domready 事件似乎在 dom 准备就绪之前就触发了
  • 加载事件似乎根本没有触发
  • 将脚本放在文件末尾,在 HTML 对象之后,也无济于事
  • 在 Mootools AJAX 选项中,我将“evalScripts”指定为 true,否则脚本根本不会运行

有什么想法吗?

最佳答案

没有什么可以阻止 IE 将元素加载到 dom 中。更新 innerHTML 属性后也没有“domready”这样的东西。考虑一下:

new Ajax("someurl", {
method: "get",
evalScripts: true,
onComplete: function() {
$("someid").setHTML(this.response.text); // load content.
}
}).request();

现在,这里的问题是,evalScripts 是在 onComplete 之前还是之后运行。我认为您发回的脚本与您用于更新的标记相关吗?

1.11 的源代码如下:

onComplete: function(){
if (this.options.update) $(this.options.update).empty().setHTML(this.response.text);
if (this.options.evalScripts || this.options.evalResponse) this.evalScripts();
this.fireEvent('onComplete', [this.response.text, this.response.xml], 20);
},

表示脚本在更新之后和 onComplete 之前被评估,所以使用:

update: $('somediv'),
evalScripts: true

应该 工作。如果没有,那么我建议尝试:

new Ajax("someurl", {
method: "get",
onComplete: function() {
$("someid").setHTML(this.response.text); // load content.
this.evalScripts();

// or if it fails still, delay it:
/*
if (window.ie)
(function() {
this.evalScripts();
}).delay(100, this);
*/
}
}).request();

关于javascript - 即 : why isn't AJAX resulting HTML updated in DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1582539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com