$ http承诺无法从回调中读取数据

时间:2014-04-04 12:32:15

标签: angularjs

我试图用$ http调用工厂。在浏览器中,我检查网络选项卡,我看到调用已经通过,数据存在,但由于某种原因,这段代码:

$scope.naloziPodatke = function () {
    if (typeof $scope.Obdobje_do === 'undefined' || typeof $scope.Obdobje_do === 'undefined') {
        alert("Napaka. Obdobje ni nastavljeno.");
    } else {
        getData.gData($scope.Obdobje_od.toLocaleDateString("en-US"), $scope.Obdobje_do.toLocaleDateString("en-US")).success(function (d) {
            console.log(d); $scope.data = d;

            for (var i = 0; i < $scope.data.d.length; i++) {
                    var virTasks = [];
                    for (var j = 0; j < $scope.data.d.SeznamVirov.length; j++) {
                        virTasks.push({ id: $scope.data.d[i].SeznamVirov[j].Id, subject: "", from: $scope.data.d[i].SeznamVirov[j].ObdobjeOd, to: $scope.data.d[i].SeznamVirov[j].ObdobjeDo, color: $scope.barve[colorCount], data: { id: $scope.data.d[i].SeznamVirov[j].Vir } });
                    }
                    $scope.dasData.push({
                        id: $scope.data.d[i].Id, name: $scope.data.d[i].Naziv, tasks: virTasks
                    });
                    if (colorCount + 1 === barve.length) {
                        colorCount = 0;
                    } else {
                        colorCount++;
                    }
                }
                console.log($scope.dasData);
        });
    }
}

返回错误:无法读取属性&#39; d&#39;未定义的。

d应该是.net序列化程序生成的数组。它在那里,浏览器看到它但角度没有。

你会注意到我有一个console.log(d);在for循环开始之前,这是屏幕截图(不知道console.log如何获取数据,但for循环没有(如果我尝试循环使用d或者如果我正在保存它,那么它是相同的&# 39;引用$ scope.data):

error

服务非常简单:

hermesGantt.factory('getData', ['$http', function ($http) {
    return {
        gData: function (obdOd, obdDo) {
            return $http({ method: 'POST', url: 'index.aspx/Filtercasvir', data: { 'odObd': obdOd, 'doObd': obdDo } });
        }
    }
}]);

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你写的不可能是data.d.something。也许它的数据[索引] .d [索引]等等..让你知道它,做console.log(数据),这样你就可以看到整个响应字段

修改

看到你的图像,它清楚我之前所说的,d是字段,其值为数组。要以任何值访问,您需要将元素值的索引放在d字段中。看一下json数组的文档,它确实在angularjs中使用了。

答案 1 :(得分:0)

你在第二个内循环中有一个错误。正确的是:

for (var j = 0; j < $scope.data.d[i].SeznamVirov.length; j++) ...