Javascript 如何处理AJAX XMLHttpRequest返回的元素?
我是AJAX和Javascript新手,在尝试访问AJAX XMLHttpRequest返回的元素时遇到了问题 情况如下: 我从另一个网站获取一个表,在使用send()方法将它打印到我的页面后,我想访问它的元素。多亏了你,我才明白为什么我做不到。我搜索了stackoverflow和google,但没有找到任何有用的东西。如果我错过了我正在寻找的答案,我应该为重复的帖子道歉 所以我的问题是:由于请求的异步性质,我不能在获取代码之后使用结果,所以在请求之后访问获取的元素的方法是什么 感谢您的关注和帮助:) 编辑:上下文 基本上,我获取一个表,将其写入指定的Javascript 如何处理AJAX XMLHttpRequest返回的元素?,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,我是AJAX和Javascript新手,在尝试访问AJAX XMLHttpRequest返回的元素时遇到了问题 情况如下: 我从另一个网站获取一个表,在使用send()方法将它打印到我的页面后,我想访问它的元素。多亏了你,我才明白为什么我做不到。我搜索了stackoverflow和google,但没有找到任何有用的东西。如果我错过了我正在寻找的答案,我应该为重复的帖子道歉 所以我的问题是:由于请求的异步性质,我不能在获取代码之后使用结果,所以在请求之后访问获取的元素的方法是什么 感谢您的关注和帮
元素(#table),然后过滤其内容,现在我的目标是将其写入另一个指定的
元素(#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");
}
现在我只是想把它的背景涂成蓝色。问题是当我获取页面时,为测试而创建的已经存在的表被蓝色填充,但在500毫秒左右之后,新表被覆盖到现有的示例表上,并且新表的背景没有用蓝色填充。要在返回后执行更多操作,只需在回调函数中添加该功能即可。从您的代码:
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
}
}
您必须向我们展示一些代码,因为您的问题是简单的回答是“有”。如果您无法让它工作,我们需要上下文来帮助您。很抱歉,添加了上下文。我看到您正在使用jQuery,为什么不使用
$.ajax()
?感谢您的回答。哈哈,这很简单:)显然,我没有理解代码的本质,因为我是一个绝对的初学者:)不过我有一个问题。因为我有点习惯于顺序编程,所以我认为xmlhttp.send()完成了抓取(顺便说一句,我从另一个源代码复制了代码块)。实际上,它执行抓取操作,但是为什么有人愿意在onreadystatechange之后编写它呢?有什么好的理由吗?@Volkanİlbeyli-这就是“回调”和“异步”通信的工作方式。对这些术语进行一些搜索,它会将其清除。一句话try>>当通信解决时,控制从程序中传递出去(做其他事情),操作系统(浏览器)因此需要一个入口点(函数)当响应到达时调用。@Volkanİlbeyli-请参阅我的答案,以获取另一个示例,以格式化您可能更清晰的代码。可爱的结构@Hogan:)我在错误处理部分遇到问题,即else
块。问题是,在请求初始化和响应准备就绪状态之间显示错误,即在获取时。我如何解决这个问题?当我收到404错误时,我只能在正确的时间显示错误,如中所列。我想让我的页面显示错误,比如说,当没有连接时,连接超时时等等。我如何管理它?@Volkanİlbeyli-如果你有你描述的症状,我必须查看你正在使用的代码。也许这应该是一个新问题,因为问题不应该如此反复。还有,这个>>