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

时间:2013-02-02 19:35:13

标签: javascript ajax xmlhttprequest

我是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左右之后,新表格被覆盖到现有示例表格上,而新表格的背景未填充蓝色

1 个答案:

答案 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
  }

}