我是AJAX和Javascript的新手,我在尝试访问由AJAX XMLHttpRequest返回的元素时遇到了问题。
方案如下:
我从另一个网站获取一个表,在使用send()方法在我的页面中打印之后,我想访问它的元素。我想通了dystroy's post,为什么我不能这样做。我搜索了stackoverflow和谷歌,但我找不到任何有用的东西。在我错过了我正在寻找的答案的情况下,我应该为重复的帖子道歉。
所以我的问题是:由于请求的异步性质,我不能在获取代码之后使用结果,在请求之后访问获取元素的方法是什么?
感谢您的关注&求助:)
编辑:上下文
基本上我获取一个表,将其写入指定的<div>
元素(#table)然后过滤其内容,我现在的目标是将其写入另一个指定的<div>
元素(#dersler) )然后仅隐藏第二列以外的列。我面临的问题如上所述,我无法访问刚刚获取的table元素。
这是代码:
function fetchPage(str)
{
if(str=="")
{
document.getElementById("table").innerHTML="";
$('#saatler').val(1); //some filtering configuration
$('#gunler').val(1); //resetting filters in other words
$('#bolumler').val(1);
return;
}
if (window.XMLHttpRequest) // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
else // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("table").innerHTML=xmlhttp.responseText;
document.getElementById("dersler").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET", "fetch.php?url=http://www.sis.itu.edu.tr/tr/ders_programlari/LSprogramlar/prg.php?fb="+str, true);
xmlhttp.send();
$('#saatler').val(1); //some filtering configuration
$('#gunler').val(1); //resetting filters in other words
$('#bolumler').val(1);
//after fetch, new filter
$("#dersler").find('table').css("background-color", "blue");
}
现在我只是想把它的背景颜色变成蓝色。问题是当我获取页面时,为测试创建的现有表格用蓝色填充,但是在500ms左右之后,新表格被覆盖到现有示例表格上,而新表格的背景未填充蓝色
答案 0 :(得分:0)
要在返回后执行更多操作,只需在回调函数中添加该功能即可。从你的代码:
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("table").innerHTML=xmlhttp.responseText;
document.getElementById("dersler").innerHTML=xmlhttp.responseText;
// Add lots of good stuff here!!
}
}
这是另一种可能更清晰的风格
function fetchPage(str)
{
// other stuff removed to save space
xmlhttp.onreadystatechange=postCallack;
xmlhttp.open("GET", "fetch.php?url=http://www.sis.itu.edu.tr/tr/ders_programlari/LSprogramlar/prg.php?fb="+str, true);
xmlhttp.send();
// any stuff that goes here will happen before callback
// (this is a good place to update a UI element showing a call is resolving.)
// (for example a spinner or text saying "fetching")
}
function postCallback()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("table").innerHTML=xmlhttp.responseText;
document.getElementById("dersler").innerHTML=xmlhttp.responseText;
// continue to process post callback.
$('#saatler').val(1); //some filtering configuration
$('#gunler').val(1); //resetting filters in other words
$('#bolumler').val(1);
//after fetch, new filter
$("#dersler").find('table').css("background-color", "blue");
}
else {
// report error with fetch
}
}