未捕获的TypeError:无法读取未定义jquery-2.1.1.js的属性“length”

未捕获的TypeError:无法读取未定义jquery-2.1.1.js的属性“length”,jquery,ajax,json,wcf,knockout.js,Jquery,Ajax,Json,Wcf,Knockout.js,我从我网站的控制台中得到一个错误,它来自Jquery框架 我想我可能有$.eachdata.results、函数索引、项{}错误,或者我需要在下面添加更多内容,以指定我希望在DOM中显示的数据。我对knockout和Jquery相当陌生 我使用wcf服务将MySql数据库中的数据输出到Json中,以便应用程序读取。我使用knockout来显示并确保数据在更改时更新 我的ViewModel如下所示: $(document).ready(function () { var machineD

我从我网站的控制台中得到一个错误,它来自Jquery框架

我想我可能有$.eachdata.results、函数索引、项{}错误,或者我需要在下面添加更多内容,以指定我希望在DOM中显示的数据。我对knockout和Jquery相当陌生

我使用wcf服务将MySql数据库中的数据输出到Json中,以便应用程序读取。我使用knockout来显示并确保数据在更改时更新

我的ViewModel如下所示:

$(document).ready(function () {

    var machineDataViewModel = {

        machineDataItems: ko.observableArray([]),

        loadMachineDataItems: function () {
            $.getJSON("http://localhost/JsonRestful/Service1.svc/GetMachineData", function (data) {
                machineDataViewModel.machineDataItems.removeAll();
                $.each(data.results, function (index, item) {
                    machineDataViewModel.machineDataItems.push(new machineDataModel(item));
                });
            });
        }
    };

    ko.applyBindings(machineDataViewModel);

    machineDataViewModel.loadMachineDataItems();

    //setInterval( loadMachineDataItems, 10000 );
});
我试图将其映射到我的视图中的元素:

<div id="knockout" data-bind="foreach: machineDataItems">
    <p id="machineNum" data-bind="text: mach_no"></p>
    <div id="Completed" data-bind="text: VAR1"></div>
    <div id="Style" data-bind="text: VAR2"></div>
    <div id="PUPC" data-bind="text: VAR3"></div>
    <div id="RPM" data-bind="text: VAR4"></div>
</div>

我认为您的问题在于数据是字符串json表示形式,可能对传入数据使用json.parse将其转换为json

我过去也遇到过这个问题,我的restfullapi中有一个字符串,Jquery在尝试foreach时抱怨了这个问题,所以我想说,您遇到了与我相同的问题

在代码中使用伪造的json处理fiddle:

事实上,当我将moc数据传递到$.getJSON应该具有的位置时,它会起作用,这让我几乎可以肯定getJSON返回的是字符串,而不是Json$。每个都会迭代

如果无法让JSON.prase正常工作,请随时发表评论

编辑:
也许读下面的内容。如您所见,他们将数据输入,将其转换为正确的JSON,然后可以使用!!!您只需使用JSON.prase返回的值替换data.results,只要data.results实际上是一个数组元素,每个循环看起来都很好。你能证实这一点吗?请看我的答案,但总而言之,你的问题是需要对你收到的数据调用JSON.parse,因为它将是JSONThank you的字符串表示,好的,先生。我现在正在尝试,我会让你知道的,关于我传入的数据,我非常确定它已经在JSON中了,因为这就是我制作Restful API的目的。这就是我的Wcf服务中的数据。我真的很感谢你的帮助我想我得到的Restful API只是一条消息?我看到您在JSFIDLE示例中创建了一个结果数组。所以我需要找到一种方法将我的数据解析成一个结果数组,或者做类似的事情?我应该使用$.each还是这样循环工作?是的,我不知道为什么它仍然不工作。这些代码对我来说都是有意义的,但在我看来没有任何输出。。
loadMachineDataItems: function () {
    (function (data) {
        machineDataViewModel.machineDataItems.removeAll();
        $.each(data.results, function (index, item) {
            machineDataViewModel.machineDataItems.push(new machineDataModel(item));
        });
     // passing in bogus data to the iffe as good json
    })({results: [{mach_no: '1', VAR1: '2', VAR2: '3', VAR3: '4', VAR4: '5'}, 
                  {mach_no: 'a1', VAR1: 'a2', VAR2: 'a3', VAR3: 'a4', VAR4: 'a5'},
                  {mach_no: 'b1', VAR1: 'b2', VAR2: 'b3', VAR3: 'b4', VAR4: 'b5'}]});
}