0

我有一个正在测试的简单脚本,但它的行为很奇怪。我调用一个加载的脚本并将其添加到一个特定的td id,然后我调用第二个脚本并将其添加到不同的脚本中,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);
        }
    });
}

然后我在我的onload上有这个:

 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加载正常,但如果我添加 case 语句,则内容会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;执行之前被调用两次,因此被上次调用的变量值替换。如果您只是在 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 回答