首先,sory为我的英语...
有人可以帮我解释为什么代码不起作用?
我希望你能弄明白问题是什么,我有点难以解释
这是代码:
<!--- 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 :(得分: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 = …