0

テストしている簡単なスクリプトがありますが、その動作は非常に奇妙です。ロードするスクリプトを呼び出して特定td idのスクリプトに追加し、次に2番目のスクリプトを呼び出してそれを別のスクリプトに追加しますtd idが、何らかの理由で、最初のdivのコンテンツが分離していても消去されます。

これは私が持っているものです:

function call_back(result,div_id,func){
        document.getElementById(div_id).innerHTML = result;
        if(typeof(func) != 'undefined'){func();}
}


function caller(url,cfunc)
{
        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=cfunc;
                xmlhttp.open("GET",url,true);
                xmlhttp.send();
}


function call_file(url,div_id,func){
    caller(url,function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            call_back(xmlhttp.responseText,div_id,func);
        }
    });
}

次に、これをオンロードに設定します。

 window.onload = function(){
    stage = 6;      
call_file('test.html','menu_left');

    switch(parseInt(stage)){
    case 6: call_file('test2.html','main'); break;
   }
};

問題はcaseステートメントで発生します。ケースステートメントを削除すると、追加されたコンテンツtest.htmlは正常に読み込まれますが、ケースステートメントを追加すると、コンテンツがtest.html消えてからtest2.html表示されるだけです。

IDのhtmlは次のとおりです。

            <table class="body_wrapper">
                <tr>
                    <td class="menu_left" id="menu_left"></td>
                    <td class="main" id="main"></td>
                </tr>   
            </table>

なぜこれが起こっているのでしょうか?

4

1 に答える 1

1

この問題は、switchステートメントとは何の関係もありません。一部のローカルファイルに対してajaxリクエストを呼び出していて、すでにキャッシュされているため、call_back関数は document.getElementById(div_id).innerHTML = result;実行前に2回呼び出され、最後の呼び出しの変数値に置き換えられます。以下のようにcall_back関数にアラートを入れるだけの場合

function call_back(result, div_id, func) {
  alert(result);
  document.getElementById(div_id).innerHTML = result;
  if (typeof (func) != 'undefined') { func(); }
}

あなたはそれが機能していることがわかります。しかし、それは解決策ではないので、代わりにこれを変更すると

xmlhttp.open("GET", url, true);

xmlhttp.open("GET", url, false);

動作しますが、AJAXの非同期機能が失われます。

于 2012-10-17T01:23:22.100 に答える