0

我是 AJAX 和 Javascript 的新手,在尝试访问 AJAX XMLHttpRequest 返回的元素时遇到问题。

场景如下:

我从另一个网站获取一个表格,并在使用 send() 方法将其打印到我的页面后,我想访问它的元素。多亏了dystroy的帖子,我才知道为什么我不能这样做。我通过 stackoverflow 和谷歌搜索,但我找不到任何有用的东西。如果我错过了我正在寻找的答案,我应该为重复的帖子道歉。

所以我的问题是:由于请求的异步性质,我不能在获取代码之后使用结果,那么在请求之后访问获取的元素的方法是什么?

感谢您的关注和帮助:)

编辑:上下文

基本上我获取一个表,将其写入指定<div>元素(#table),然后过滤其内容,我现在的目标是将其写入另一个指定<div>元素(#dersler),然后仅隐藏第二列以外的列。我面临的问题如上所述,我无法到达刚刚获取的表格元素。

这是代码:

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 毫秒左右后,新表被覆盖到现有示例表上,并且新表的背景没有填充蓝色.

4

1 回答 1

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
  }

}
于 2013-02-03T03:31:25.767 回答