为什么这些功能中的一个只能一次工作?

时间:2011-05-08 01:33:10

标签: php javascript ajax

即使我删除了if语句,也只能使用以下其中一项。为了让前者发挥作用,我必须对后者进行评论。

<?
if(isset($_POST['region'])){
echo "<script> showRecords('".$_POST['region']."','region','country') </script>";}
if(isset($_POST['country'])){
echo "<script> showRecords('".$_POST['country']."','country','provice') </script>";}
?>

脚本指的是:

function showRecords(str,column,nextDiv)
{
if (str=="")
  {

  document.getElementById(nextDiv).innerHTML="";
  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(nextDiv).innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","get"+column+".php?"+column+"="+str,true);
xmlhttp.send();
}

该脚本指向一组非常简单的页面,其中列出了一些基于某些$ _GET信息的值。

我无法理解为什么它只允许我一次执行其中一个脚本。我甚至尝试将函数克隆到showRecords2,它仍然只会执行showRecords或showRecords2。

1 个答案:

答案 0 :(得分:5)

xmlhttp=new XMLHttpRequest()替换为var xmlhttp=new XMLHttpRequest()。请注意添加了 var 关键字。发生的事情是xmlhttp正在变成一个全局范围变量,并且每次发出请求时它都会被新值/参数/参数覆盖,例如调用showRecords两次,而第一个仍然在做第二个调用覆盖它。

请记住在函数级别创建所有变量以避免覆盖,除非它们实际上将在全局范围内使用。调试此类问题需要花费大量时间,尤其是当您不知道在哪里找到东西时。希望有所帮助!