Javascript Ajax只运行一次
我有一个ajax函数,我希望它能运行1912次,但出于某种原因,它只运行一次。我正在使用startAt和stopAt来确定它应该何时停止运行,但由于某些原因它不起作用。我做错了什么Javascript Ajax只运行一次,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我有一个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
<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>
预期结果:
问题在于:
var link = data;
您正在重新分配link
的值作为返回的数据
然后,在超时时间内立即调用:
callAjax(gotoUrl, link, startAt, stopAt, output)
但是link
不再是一个链接,而是一个对象,因此jquery会出错,并在一次迭代后自动消失
删除该行可以使代码函数正常工作,只需将数据存储在另一个变量中,它就可以工作了
您正在放置startAt++;在异步调用中,为什么不在实际执行ajax调用之前进行调用?为什么需要
setTimeout()
调用?只需调用函数…@Chris我想暂停100毫秒。@Sudakatux当我将它放入success中时,它就工作了。假设会发生什么情况?请尝试在完整事件中使用console.loggingdata
,以确保该事件均匀触发…是否有方法将对象转换回字符串?这实际上取决于该对象是什么。有不同类型的对象?主要类型是什么?等等。你是说像数组之类的?
var link = data;
callAjax(gotoUrl, link, startAt, stopAt, output)