2013-07-30 62 views
0

首先,索里,我的英语...AJAX的代码不工作

  • 的 “FUNC 0” 是阿贾克斯。
  • “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),但它显示文本refresh.php(func 1)“aaa” 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 ---> 
+0

对于故障排除,零件/零件没什么意义。如果这是以jsFiddle的形式,那将会容易得多。请尝试设置一个。 – DevlshOne

+0

@DevlshOne AJAX同源策略不会阻止它工作吗? – Barmar

+0

你在任何地方遇到任何错误?什么不正确? – rednaw

回答

2

的主要问题是xmlhttp被定义为全局变量,所以如果你碰巧有两个AJAX查询同时加载,它们将互相干扰。使用var xmlhttp来解决这个问题。

这就是说,你不应该支持IE6,甚至不如IE5。因为你只有一个全局变量xmlhttp

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(); 
+0

感谢它的工作! =]但现在我有问题。如果该成员尝试发送文本,例如“11111”,则发送并且一切正常。但如果之后他尝试发送其他文本,例如“00000”,它会继续发送第一个文本(11111)。我怎样才能解决这个问题? – ldoroni

0

:只要做到这一点。如果您将两个函数都放在页面上,可能会发生它们试图并行发送两个请求,然后这些请求会发生干扰。将其作为本地变量:

var xmlhttp = …