微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – IE:为什么AJAX不会在DOM中更新HTML?

我正在通过ajax将html内容加载到div上(使用mootools 1.11和squeezeBox,如果重要的话).
在我加载的内容中,我有一些JS来操作一些加载的 HTML对象.
在FF中一切正常,但是当我在IE中加载它(现在在IE7上测试)时,代码失败,“’null’为null或不是对象.
快速测试表明,AJAX加载的新元素不在IE DOM中.加载了一个id为’test’的div,当我运行document.getElementById(‘test’)时,我得到了null.不用说在原始元素上运行getElementById工作正常.

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

更多信息:
我把我的代码放在窗口’domready’中.尝试使用’load’事件,但IE从未调用它.

UPDATE
建议,我在IE8上检查了相同的脚本,它具有更好的调试能力.
似乎问题确实在时机上.我在windows的domready上运行我的代码,它似乎立即运行,而没有真正等待DOM准备就绪(在弹出窗口中).使用调试器运行相同的脚本,一旦整个页面加载,找到没有问题的元素.
所以我想现在的问题是如何让脚本在适当的时间运行.

>在dom准备好之前,domready事件似乎很好
>加载事件似乎根本不会发生
>在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",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();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐