Javascript setTimeout未提供预期的输出
我有以下代码,但它似乎不能正常工作。我不明白为什么 JSJavascript setTimeout未提供预期的输出,javascript,php,jquery,settimeout,Javascript,Php,Jquery,Settimeout,我有以下代码,但它似乎不能正常工作。我不明白为什么 JS var updateBoard = function() { $.ajax({ type: "POST", url: "engine/main.php", data: {codes: 2}, success: function(response) { console.log(response);
var updateBoard = function() {
$.ajax({
type: "POST",
url: "engine/main.php",
data: {codes: 2},
success: function(response) {
console.log(response);
}
});
setTimeout(updateBoard, 1000);
};
PHP
if(isset($_POST['codes'])) {
echo "test";
}
您可以尝试以下方法:
var updateBoard = function() {
$.ajax({
type: "POST",
url: "engine/main.php",
data: {codes: 2},
success: function(response) {
console.log(response);
setTimeout(updateBoard, 1000); //calling the function after 1 sec after we get the response
}
});
};
updateBoard(); //calling it right away
正如@Smiranin所说,只需在函数外部调用setTimeout:
var updateBoard = function(){
$.ajax({
type: "POST",
url: "engine/main.php",
data: {codes: 2},
success: function(response) {
console.log(response)
}
})
};
setTimeout(updateBoard, 1000);
或者只使用setInterval而不是SetTimeout
setInterval(updateBoard, 1000);
如果希望每秒钟运行一次,可以尝试setInterval()
var updateBoard=function(){
$.ajax({
类型:“POST”,
url:“engine/main.php”,
数据:{代码:2},
成功:功能(响应){
控制台日志(响应);
}
});
};
设置间隔(更新板,1000);
所以调用setTimeout(updateBoard,1000);`在更高的层次上。问题是什么。你期望从上面的代码中得到什么?@vijayP,我期望每隔一秒就能在我的控制台中得到单词
test
。但是我的代码没有给出任何输出。A)您最好使用成功处理程序设置下一个超时,以避免在一个请求花费>1s的情况下出现请求重叠。B)您必须在函数开始调用自身之前调用一次函数(除非您忘了添加此代码行)@Smiranin-no;递归setTime和setInterval之间有很大的区别。在设置间隔的情况下;我们在每1秒后发出请求,但不知道之前请求的响应是否返回。但在设置超时的情况下;只有在前一个请求已完成的情况下,我们才会提出下一个请求。因此,最终我们减少了服务器的通信量。它只在控制台中运行一次我的代码,导致只打印一次test
。@Ayan在我编辑时,只使用setInterval而不是setTimeout检查:@setInterval也起作用,但我不喜欢它处理重叠的请求问题。后端请求的间隔不是一个好主意。假设您有一个比1s更长的请求(例如,有人在移动设备上使用高延迟连接)。你最终会遇到一堆重叠的请求。