0

私はAJAXとJavascriptを初めて使用し、AJAXXMLHttpRequestによって返される要素に到達しようとすると問題が発生します。

シナリオは次のとおりです。

別のWebサイトからテーブルをフェッチし、send()メソッドを使用してページに出力した後、その要素にアクセスしたいと思います。dystroyの投稿のおかげでなぜそれができないのか理解しました。stackoverflowとgoogleを検索しましたが、役立つものは見つかりませんでした。探している答えを逃した場合は、投稿が重複していることをお詫びします。

だから私の質問は:リクエストの非同期性のためにフェッチコードの直後の結果を使用できないので、リクエストの直後にフェッチされた要素にアクセスする方法は何ですか?

ご清聴ありがとうございました:)

編集:コンテキスト

基本的に、テーブルをフェッチし、指定された<div>要素(#table)に書き込んでからその内容をフィルタリングします。ここでの目的は、テーブルを他の指定された<div>要素(#dersler)に書き込んでから、2番目の列以外の列のみを非表示にすることです。私が直面している問題は、前述のように、フェッチされたばかりのテーブル要素に到達できないことです。

コードは次のとおりです。

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 に答える