gpt4 book ai didi

javascript - 为什么这个 setTimeout 根本不触发?

转载 作者:行者123 更新时间:2023-11-28 19:24:02 25 4
gpt4 key购买 nike

我正在使用 Knockout js,我一定错过了一些非常概念化的东西。我没有收到错误,所以我很难理解我哪里出了问题。我只是想每 X 秒提取一次数据并用该数据重新填充我的表。我使用 Knockout js 进行绑定(bind)。此示例代码应该足以显示问题:

            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 请求或第二个日志函数通过。

最佳答案

实际上这里存在一些问题。

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

第二个问题是,正如其他人提到的,第一次调用“self.refreshServers()”确实需要括号才能执行第一次调用,并且“setInterval()”内部的引用不应该有括号。这是因为在“setInterval()”中,您传递的是对将要执行的函数的引用,而不是已执行函数的结果。

除去 AJAX,这里是一个基于您的代码的工作示例:

function AppViewModel() {
var self = this;
self.numberOfIntervals = 0;

self.servers = ko.observableArray([{
Name: 'Loading...',
Url: 'Loading...',
Environment: 'Loading...',
Health: 'Loading...'
}]);

self.refreshServers = function () {
// AJAX GOES HERE... THEN UPDATE RESULTS
self.servers.push({
Name: 'New Name...' + self.numberOfIntervals,
Url: 'New Url...' + self.numberOfIntervals,
Environment: 'New Enviornment...' + self.numberOfIntervals,
Health: 'New Health...' + self.numberOfIntervals
});

self.numberOfIntervals++;
};

self.refreshServers();
setInterval(self.refreshServers, 3000);
}

ko.applyBindings(AppViewModel);

这是一个可以使用的 fiddle :http://jsfiddle.net/dunka494/4/

希望对你有帮助!

关于javascript - 为什么这个 setTimeout 根本不触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28225990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com