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

时间:2014-10-14 21:36:34

标签: jquery ajax json wcf knockout.js

我从我的网站中的控制台收到错误,它来自Jquery框架。

我想我可能有$ .each(data.results,function(index,items)){}错误,或者我需要在其下面添加更多内容来指定我想要在DOM中显示的数据。我是淘汰赛和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>

1 个答案:

答案 0 :(得分:0)

我认为你的问题是作为字符串json表示的数据,也许在你的传入数据上使用JSON.parse将它变成JSON

我过去也遇到过这个问题,我的Restfull API中有一个字符串,Jquery在试图预告时抱怨它,所以我会说你有同样的问题。

使用伪造的json和你的代码工作小提琴:http://jsfiddle.net/75otf0s8/4/

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'}]});
}

当我将我的moc数据传递到$ .getJSON所拥有的数据时,它的工作原理让我几乎可以肯定getJSON会返回你的字符串,而不是Json $ .each会迭代过来。

如果您无法让JSON.prase工作,请随意发表评论。

编辑: 也许请阅读以下Knockout Documentation。如您所见,他们获取数据,将其转换为正确的JSON,然后他们可以使用!您只需将data.results替换为JSON.prase返回的值