javascript - Javascript 控制台中未定义函数

标签 javascript jquery ajax knockout.js

我不知道为什么我的函数在控制台中显示未定义。我已经尽力让它变得正确,但我似乎无法做到这一点。在我尝试使用 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/

相关文章:

javascript - WebRTC 直播视频流 node.js

jquery - 使用 jQuery 检测 HTML5 视频播放/暂停状态

jquery - 我需要在 Select2 中添加 "Add new item"选项

jquery - Internet Explorer 中奇怪的 `div` 和 `size` 问题

php - Codeigniter - 使用 AJAX 下载 CSV

javascript - 加载动态 php 生成的 javascript

javascript - JSON 响应 Long 被舍入或损坏

javascript - 将 Minecraft Pocket Edition mod 导入 Blocklauncher 时出错

javascript - 如何检测旧版本的浏览器并重定向到浏览器支持页面

javascript - 将 mongoDB View 的结果发送到另一个集合( INSERT....SELECT from SQL )