Javascript 为什么我的脚本不能用于ajax文档?

Javascript 为什么我的脚本不能用于ajax文档?,javascript,ajax,Javascript,Ajax,我的js代码无法处理ajax加载的文档 下面是我的html js结构 index.html index.html中包含的abc.js index.html中的fine.html(由ajax_abc.js加载) 如果我定义了某个变量(参考fine.html中的元素),该变量将变为null 比如说, index.html: <script src="abc.js"></script> ajax load document sententes; var a = documen

我的js代码无法处理ajax加载的文档

下面是我的html js结构

  • index.html
  • index.html中包含的abc.js
  • index.html中的fine.html(由ajax_abc.js加载)
  • 如果我定义了某个变量(参考fine.html中的元素),该变量将变为null

    比如说,

    index.html:

    <script src="abc.js"></script>
    
    ajax load document sententes;
    var a = document.getElementById('asdf'); // asdf is located in fine.html
    
    a; // result: null
    
    a = document.getElementById('asdf');
    a; // result: not null
    
    var xhr;
    xhr = new XMLHttpRequest();
    function xhrDocOpen(doc){
        xhr.onreadystatechange=function(){
            if(xhr.readyState==4 && xhr.status==200){
                document.getElementById('bodyFrame').innerHTML=xhr.responseText;
            }
        }
        xhr.open('GET',doc,true);
        xhr.send();
    }
        xhrDocOpen('introOrgan.html');
    
    浏览器控制台:

    <script src="abc.js"></script>
    
    ajax load document sententes;
    var a = document.getElementById('asdf'); // asdf is located in fine.html
    
    a; // result: null
    
    a = document.getElementById('asdf');
    a; // result: not null
    
    var xhr;
    xhr = new XMLHttpRequest();
    function xhrDocOpen(doc){
        xhr.onreadystatechange=function(){
            if(xhr.readyState==4 && xhr.status==200){
                document.getElementById('bodyFrame').innerHTML=xhr.responseText;
            }
        }
        xhr.open('GET',doc,true);
        xhr.send();
    }
        xhrDocOpen('introOrgan.html');
    
    我想那是因为加载abc.js时,fine.html不存在

    这就是为什么abc.js不能处理fine.html(ajax文档)的原因

    我将abc.js放在fine.html的底部,但这没有效果

    如何使脚本在ajax文档上工作

    abc.js中的ajax代码:

    <script src="abc.js"></script>
    
    ajax load document sententes;
    var a = document.getElementById('asdf'); // asdf is located in fine.html
    
    a; // result: null
    
    a = document.getElementById('asdf');
    a; // result: not null
    
    var xhr;
    xhr = new XMLHttpRequest();
    function xhrDocOpen(doc){
        xhr.onreadystatechange=function(){
            if(xhr.readyState==4 && xhr.status==200){
                document.getElementById('bodyFrame').innerHTML=xhr.responseText;
            }
        }
        xhr.open('GET',doc,true);
        xhr.send();
    }
        xhrDocOpen('introOrgan.html');
    

    您需要为
    文档
    使用正确的范围

    这一行:

    var a=document.getElementById('asdf')

    失败,因为
    文档
    用于index.html,而不是fine.html

    首先,您需要等待fine.html被加载

    改为尝试此操作,它将等待内容加载,然后再将
    a
    分配给从fine.html注入的元素:

    var a;
    var xhr;
    xhr = new XMLHttpRequest();
    function xhrDocOpen(doc){
        xhr.onreadystatechange=function(){
            if(xhr.readyState==4 && xhr.status==200){
                // load content from fine.html into DOM
                document.getElementById('bodyFrame').innerHTML=xhr.responseText;
    
                // search DOM after fine.html content loaded
                a = document.getElementById('asdf');
            }
        }
        xhr.open('GET',doc,true);
        xhr.send();
    }
        xhrDocOpen('introOrgan.html');
    

    问题可能取决于将
    放在html代码中的位置。你能完成你的html代码,至少告诉我们
    asdf
    元素在哪里吗?我把外部脚本代码放在文档的底部,就在。。它可以很好地与index.html配合使用。仅显示ajax文档的功能问题。所以我认为这个地方不是原因……你是对的。比什么样的关键字需要替换文档?我更新了上面的代码。起初我以为你在使用IFRAME,但我误解了。您的代码失败,因为您在加载fine.html中的内容之前分配了
    a
    。然后在您的控制台中分配它,它不再是空的,因为到那时内容已经加载(时间问题)。谢谢,但这是从外部脚本处理ajax文档元素的唯一方法吗?