Javascript setTimeout未提供预期的输出

Javascript 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);

我有以下代码,但它似乎不能正常工作。我不明白为什么

JS

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更长的请求(例如,有人在移动设备上使用高延迟连接)。你最终会遇到一堆重叠的请求。