Javascript 为什么';这根本就不是火灾吗?

Javascript 为什么';这根本就不是火灾吗?,javascript,jquery,ajax,knockout.js,Javascript,Jquery,Ajax,Knockout.js,我使用的是击倒js,我一定是遗漏了一些非常概念化的东西。我没有犯错误,所以我很难理解我的错误。我只想每隔X秒提取一次数据,然后用这些数据重新填充我的表。我正在使用Knockout js进行绑定。此示例代码应足以显示问题: function AppViewModel() { var self = this; self.servers = ko.observableArray([{ Name: 'Loading...', Url

我使用的是击倒js,我一定是遗漏了一些非常概念化的东西。我没有犯错误,所以我很难理解我的错误。我只想每隔X秒提取一次数据,然后用这些数据重新填充我的表。我正在使用Knockout js进行绑定。此示例代码应足以显示问题:

            function AppViewModel() {
            var self = this;
            self.servers = ko.observableArray([{ Name: 'Loading...', Url: 'Loading...', Environment: 'Loading...', Health: 'Loading...' }]);
            self.refreshServers = function () {
                $.ajax({
                    url: '@Url.Action("GetData", "Temp")',
                    data: { id: 1 },
                    type: 'POST',
                    success: function (data) {
                        self.servers(data);
                        console.log("finished loading data");
                    }
                });
            };
            self.refreshServers();
            setInterval(self.refreshServers, 15000);
        }
        ko.applyBindings(fViewModel);

我直接调用self.refreshServers函数一次,以立即填充数据(也许有更好的方法来填充数据?),然后将超时设置为连续调用。我从未看到第二个ajax请求或第二个日志函数通过。

函数以
()
结尾,因此在这种情况下,您的函数可能被称为
刷新服务器()。还请注意,您将计时器设置为15秒,这很长。

函数以
()
结尾,因此在这种情况下,您的函数可能被称为
刷新服务器()
。还请注意,您将计时器设置为15秒,这很长。

函数以
()
结尾,因此在这种情况下,您的函数可能被称为
刷新服务器()
。还请注意,您将计时器设置为15秒,这很长。

函数以
()
结尾,因此在这种情况下,您的函数可能被称为
刷新服务器()
。还请注意,您将计时器设置为15秒,这很长。

设置超时(self.refreshServers,15000)AppViewModel()
时,code>立即运行

正如您所说的,它会立即运行,因为它需要
function(){}
作为参数在所需的15秒后实际执行

请尝试以下方法:

....
setTimeout(function(){
    self.refreshServers();
}, 15000);
.....
**
在这里要小心
setInterval
setTimeout
不同

setInterval
将在给定的时间间隔内定期运行一段或一块代码,而
setTimeout
将只运行一次(或者每次调用
AppViewModel()
时)。正如您所说,您的代码只运行一次,但可能比您实际希望它运行的时间要早。

setTimeout(self.refreshServers,15000)AppViewModel()
时,code>立即运行

正如您所说的,它会立即运行,因为它需要
function(){}
作为参数在所需的15秒后实际执行

请尝试以下方法:

....
setTimeout(function(){
    self.refreshServers();
}, 15000);
.....
**
在这里要小心
setInterval
setTimeout
不同

setInterval
将在给定的时间间隔内定期运行一段或一块代码,而
setTimeout
将只运行一次(或者每次调用
AppViewModel()
时)。正如您所说,您的代码只运行一次,但可能比您实际希望它运行的时间要早。

setTimeout(self.refreshServers,15000)AppViewModel()
时,code>立即运行

正如您所说的,它会立即运行,因为它需要
function(){}
作为参数在所需的15秒后实际执行

请尝试以下方法:

....
setTimeout(function(){
    self.refreshServers();
}, 15000);
.....
**
在这里要小心
setInterval
setTimeout
不同

setInterval
将在给定的时间间隔内定期运行一段或一块代码,而
setTimeout
将只运行一次(或者每次调用
AppViewModel()
时)。正如您所说,您的代码只运行一次,但可能比您实际希望它运行的时间要早。

setTimeout(self.refreshServers,15000)AppViewModel()
时,code>立即运行

正如您所说的,它会立即运行,因为它需要
function(){}
作为参数在所需的15秒后实际执行

请尝试以下方法:

....
setTimeout(function(){
    self.refreshServers();
}, 15000);
.....
**
在这里要小心
setInterval
setTimeout
不同


setInterval
将在给定的时间间隔内定期运行一段或一块代码,而
setTimeout
将只运行一次(或者每次调用
AppViewModel()
时)。正如您所说,您的代码只运行了一次,但可能在您真正希望它运行之前就已经运行了。

感谢@kinakuta和@Marin Smit指出了我没有理解的明显问题。很明显,我读到setInterval和setTimeout之间的差异的速度太快了


这两种解决方案是添加括号,并从setTimeout改为setInterval,这要感谢@kinakuta和@Marin Smit指出了我未能理解的明显问题。很明显,我读到setInterval和setTimeout之间的差异的速度太快了


这两种解决方案是添加括号,并从setTimeout改为setInterval,这要感谢@kinakuta和@Marin Smit指出了我未能理解的明显问题。很明显,我读到setInterval和setTimeout之间的差异的速度太快了


这两种解决方案是添加括号,并从setTimeout改为setInterval,这要感谢@kinakuta和@Marin Smit指出了我未能理解的明显问题。很明显,我读到setInterval和setTimeout之间的差异的速度太快了


这两种解决方案是添加括号和从setTimeout更改为setInterval,实际上这里有一些问题

首先,根据您对问题的描述,听起来您可能想要“setInterval()”而不是“setTimeout()”。不同之处在于,“setInterval()”将根据特定的时间间隔连续执行,而“setTimeout()”仅在时间过去后执行一次

第二个问题是,正如其他人所提到的,对“self.refreshServers()”的第一个调用确实需要括号才能执行第一个调用,“setInterval()”中的引用应该