Javascript 为什么我的脚本不能用于ajax文档?
我的js代码无法处理ajax加载的文档 下面是我的html js结构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
<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文档元素的唯一方法吗?