进行多个ajax调用

时间:2014-02-27 20:53:29

标签: ajax callback

我正在尝试在同一页面上运行多个AJAX调用,但似乎遇到了麻烦。我是新手,所以我真的不明白发生了什么。我有一个下拉菜单,我希望它在选择更改时更新两个不同位置的内容。每个都是自己工作,但当我尝试一起运行它时,它只更新我最后运行的任何脚本。任何帮助将不胜感激

<script>
function showUser(str)
{
if (str=="")
  {
  document.getElementById("txtHint").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("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","../php/get_org.php?q="+str,true);
xmlhttp.send();
}
</script>

<script>
function list(str)
{
if (str=="")
  {
  document.getElementById("list").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("list").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","../php/list_org.php?q="+str,true);
xmlhttp.send();
}
</script>

1 个答案:

答案 0 :(得分:0)

原因很简单,您对两个请求xmlhttp使用相同的全局变量。 在声明像var这样的变量时使用var xmlhttp = new XMLHttpRequest();

您的代码初始化xmlhttp并请求某个页面。在请求完成之前,您运行另一个函数,再次使用xmlhttp。它被重新初始化,并设置了新的onreadystatechange处理程序并进行了另一个请求。因此,实际上只执行了最后一个响应处理程序集。