ajax的代码不起作用

时间:2013-07-30 10:50:02

标签: php javascript html ajax

首先,sory为我的英语...

  • “func 0”是ajax。
  • “func 1”是每1000毫秒刷新ajax代码的代码。当代码工作时刷新refesh.php页面并将其上的文本发送到“bbb”div。
  • “func 2”是成员写入文本然后将文本发送到send.php页面的代码(文本发送到mySQL)然后它在“aaa”div中显示文本。

有人可以帮我解释为什么代码不起作用?

  • 如果我在页面中放入“func 0”和“func 1”,一切都很好。
  • 如果我在页面中放入“func 0”和“func 2”,一切都很好。
  • 但是如果我把所有3个功能放在页面上,它就不起作用了。我不知道为什么当成员试图发送文本时它将文本发送到mySQL(func 2),但它在“aaa”上显示来自 refresh.php (func 1)的文本 div(func 2),而不是显示成员发送到“aaa”div的文本。

我希望你能弄明白问题是什么,我有点难以解释


这是代码:

<!--- func 0 --->
<script>
function refresh(name, url, info, type)
{
var str;
if (type=="send") {
str = document.forms["aaa"]["txt"].value;
}
if (type=="send" && str=="")
  {
  document.getElementById(name).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(name).innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET",url+"?info="+str,true); // send the text to page
xmlhttp.send();  
return false;
}
</script>
<!--- end - func 0 --->


<!--- func 1 --->
<script type="text/javascript">
setInterval("refresh('bbb', 'refresh.php', '', 'refresh')", "1000");
</script>
<div id='bbb'> div to refresh at 1000 ms </div>
<!--- end - func 1 --->


<!--- func 2 --->
<form name='aaa' onsubmit="return refresh('aaa', 'send.php', '', 'send');" method='post'>
txt: <input type='text' name='txt' autofocus='autofocus'> <input type='submit' value=' send '>
</form>
<div id='aaa'> div that <b>*send*</b> txt to sql </div>
<!--- end - func 2 --->

2 个答案:

答案 0 :(得分:2)

主要问题是xmlhttp被定义为全局变量,因此如果您恰好同时加载两个AJAX查询,它们将相互干扰。使用var xmlhttp来解决此问题。

话虽这么说,你不应该支持IE6甚至IE5。就这样做:

var xhr = new XMLHttpRequest();
xhr.open("GET",url+"?info="+str,true);
xhr.onreadystatechange = function() {
  if( this.readyState == 4 && this.status == 200) {
    document.getElementById(name).innerHTML = this.responseText;
  }
};
xhr.send();

答案 1 :(得分:0)

因为您只有一个全局xmlhttp变量。如果您将两个函数放在页面上,则可能会发生这样的情况:它们会尝试并行发送两个请求,然后会发生干扰。将它设为局部变量:

var xmlhttp = …