我不知道为什么我的函数在控制台中显示未定义。我已经尽力让它变得正确,但我似乎无法做到这一点。在我尝试使用 setInterval 函数之前它工作正常。另外,构建一直说我缺少一个分号,但我只是没有看到它。
$(document).ready(function () {
var machineDataViewModel = {
machineDataItems: ko.observableArray([]),
loadMachineDataItems: function DataLoad() {
machineDataViewModel.machineDataItems.length = 0;
$.getJSON("http://localhost/JsonRestful/Service1.svc/GetMachineData", function (data) {
$.each(data.GetMachineDataResult, function (index, item) {
machineDataViewModel.machineDataItems.push(new machineDataModel(item));
});
});
}
};
ko.applyBindings(machineDataViewModel);
machineDataViewModel.loadMachineDataItems();
setInterval(DataLoad, 9000);
});
function machineDataModel(item) {
this.mach_no = ko.observable(item.mach_no),
this.VAR1 = ko.observable(item.VAR1),
this.VAR2 = ko.observable(item.VAR2),
this.VAR3 = ko.observable(item.VAR3),
this.VAR4 = ko.observable(item.VAR4)
};
最佳答案
您无法按照自己的方式定义 DataLoad()
函数并期望它在 setInterval()
中可用。事实并非如此。符号DataLoad
仅在该函数的范围内可用。相反,您可以将其称为:
setInterval(machineDataViewModel.loadMachineDataItems, 9000);
这是一个简单的演示,显示您不能像现在这样命名函数并期望在该范围之外使用该名称:http://jsfiddle.net/jfriend00/6t0pp60s/ (在调试控制台中查看错误)。
<小时/>仅供引用,如果您需要您的函数具有正确的 this
值(我认为您实际上并没有这样做),那么您可以像这样调用它(在每行末尾):
setInterval(machineDataViewModel.loadMachineDataItems.bind(machineDataViewModel), 9000);
<小时/>
对于分号问题,jsHint指向this.VAR4
赋值行。我建议将 machineDataModel()
更改为此(这会给你 jsHint 带来干净的健康状况):
function machineDataModel(item) {
this.mach_no = ko.observable(item.mach_no);
this.VAR1 = ko.observable(item.VAR1);
this.VAR2 = ko.observable(item.VAR2);
this.VAR3 = ko.observable(item.VAR3);
this.VAR4 = ko.observable(item.VAR4);
}
关于javascript - Javascript 控制台中未定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26663369/