1

首先,对不起我的英语...

  • “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” div(func 2)上显示来自refresh.php(func 1)的文本,而不是显示成员发送到“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 --->
4

2 回答 2

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();
于 2013-07-30T10:55:00.447 回答
0

因为你只有一个全局xmlhttp变量。如果您将这两个函数都放在页面上,它们可能会尝试并行发送两个请求,这会干扰。使其成为局部变量:

var xmlhttp = …
于 2013-07-30T10:55:51.330 回答