Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何处理AJAX XMLHttpRequest返回的元素?_Javascript_Ajax_Xmlhttprequest - Fatal编程技术网

Javascript 如何处理AJAX XMLHttpRequest返回的元素?

Javascript 如何处理AJAX XMLHttpRequest返回的元素?,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,我是AJAX和Javascript新手,在尝试访问AJAX XMLHttpRequest返回的元素时遇到了问题 情况如下: 我从另一个网站获取一个表,在使用send()方法将它打印到我的页面后,我想访问它的元素。多亏了你,我才明白为什么我做不到。我搜索了stackoverflow和google,但没有找到任何有用的东西。如果我错过了我正在寻找的答案,我应该为重复的帖子道歉 所以我的问题是:由于请求的异步性质,我不能在获取代码之后使用结果,所以在请求之后访问获取的元素的方法是什么 感谢您的关注和帮

我是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-如果你有你描述的症状,我必须查看你正在使用的代码。也许这应该是一个新问题,因为问题不应该如此反复。还有,这个>>