即使删除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。

最佳答案

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

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

关于php - 为什么只有这些功能之一会同时起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5925094/

10-14 00:26