调用函数会取消之前的操作

时间:2012-10-17 01:02:32

标签: javascript

我有一个简单的脚本,我正在测试,但它的表现很奇怪。我调用一个加载的脚本,然后将其添加到特定的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>

为什么会发生这种情况?

1 个答案:

答案 0 :(得分: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的异步功能。