我在html页面中有一个小脚本循环遍历一个数组,它运行一个ajax函数来检查文件是否在那里,如果它是..在数组中输出一个数字;如果不是它打印0.问题是它只是挂起(浏览器只是坐在那里永远加载)第一次迭代后。有没有办法关闭连接?我对Ajax很新,所以感谢你的帮助。
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var cnt = 0;
var getNum;
var num = [25, 15, 24, 16, 23, 17, 22, 18, 21, 19, 20];
var response = 1;
function getAjax(sales, cnt, getNum){
loadDoc(response);
if(response == 1 )
{
if(cnt >= 11)
{
cnt = 0;
}
else
{
cnt++;
}
getNum = num[cnt];
}
else{
getNum = 0;
}
document.write(getNum + '<br/>');
}
function loadDoc(response)
{
var xmlhttp;
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)
{
response = 1;
}
else
{
response = 0;
}
}
xmlhttp.open("GET","randomFile.js",true);
xmlhttp.send();
}
function runIt(num, cnt, getNum, response){
setTimeout('getAjax(num, cnt, getNum)', 3000);
}
</script>
</head>
<body>
<div id="alert"></div>
<button type="button" onclick="runIt(num, cnt, getNum, response)">Change Content</button>
</body>
</html>
答案 0 :(得分:0)
XMLHttpRequests是异步的。这意味着这里的一切
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
response = 1;
}
else
{
response = 0;
}
}
在发出请求后运行一段时间。更具体地说:
...
loadDoc(response);
// the XMLHttpRequest might not have finished within this gap
if(response == 1 ) // <----- response might have not been updated yet
...
因此,如果您立即检查response
,它可能尚未更新。相反,需要运行的所有依赖于响应的内容应该放在上面显示的回调函数中。这包括你的计数器递增逻辑。
此外,您已将response
变量传递给loadDoc
,由于response
已是全局变量,因此无用。