所以标题类型说明会发生什么。我有一个ajax调用,如果它成功,它发出另一个,但问题是在一个完成之前它已经发出另一个,并且ajax开始堆叠。我不使用async,并使用 php 作为我的服务器语言。我的ajax也有超时5秒= 5000毫秒。 所以它轮询服务器,当它正在发生等待,然后javascript做了一个新的ajax调用,甚至在另一个回来之前有信息。
所以这是我的jquery ajax调用
$.ajax({
url: ("json/getfriends.php"),
type: 'POST',
data: {friendlist: friendsarray},
async: false,
timeout: 5000,
dataType: 'json',
success: function(data){
$.each(data, function(i, val){
friendsarray.push(val);
});
setTimeout("friends();", 15000); //loops the ajax call
},
error: function(jqXHR, textStatus, errorThrown)
{
if (errorThrown['code'] == 101){
//time out, not data was received
setTimeout("friends();", 15000); //loops the ajax call
}
else
{
console.log(errorThrown);
}
}
});
所以我的问题是如何停止ajax堆叠在彼此之上或者只有在另一个调用带回数据后才能进行一次ajax调用。
答案 0 :(得分:1)
底线是,您展示的代码没有出现问题。
但是,您添加的full JavaScript有一个主要问题:
...
setTimeout(chat_check(), 20000);
...
看到了吗?它立即从成功处理程序中运行chat_check()
。不是个好主意!
应该是这样的:
setTimeout(chat_check, 20000);
它传递函数引用作为第一个参数,而不是函数结果。您可能希望在friends()
电话中应用相同内容:
setTimeout(friends, 15000);
修改强>
顺便说一句,我不确定你为什么使用async: false
,但这样做对用户体验不是很好,因为浏览器在请求期间没有响应。
使用默认的异步模式更好:)