我有一个ajax函数,我希望它运行1912次,但由于某种原因它只运行一次。我使用startAt和stopAt来确定它何时应该停止运行,但由于某些原因它无法正常工作。我究竟做错了什么?
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script type = "text/javascript">
function callAjax(gotoUrl, link, startAt, stopAt, output) {
$.ajax({
type: "POST",
url: gotoUrl,
data: { link : link },
error: function(xhr,status,error){
alert("error");
},
success:function(data) {
document.getElementById(output).innerHTML += startAt;
},
complete:function(data) {
startAt++;
var link = data;
if (startAt < stopAt) {
setTimeout(function(){
callAjax(gotoUrl, link, startAt, stopAt, output)
}, 100);
}
}
});
} //end of function callAjax()
</script>
<body onload = 'callAjax("test1.php", "link", 1, 1912, "output")'>
<div id = "output"></div>
结果:
1
预期结果:
1912
答案 0 :(得分:2)
问题出在这一行:
var link = data;
您正在重新分配link
的值作为返回的数据。
然后在超时内立即调用它:
callAjax(gotoUrl, link, startAt, stopAt, output)
但是link
不再是一个对象的链接,因此jquery错误输出,并且在一次迭代后静默地死亡。
删除该行使代码功能正常,您只需将数据存储在另一个变量中即可。
Here's a fiddle with the functional code with just that line commented out.