7

我正在使用以下代码获取 json 对象并将其绑定到 $scope

工作代码:

$http({
    url: '/Home/GetJson',
    method: "GET",
    params: {
        clientID: cId
    }
}).success(function (data) {
    $scope.members = data.members;
})

它有效.. 我想做的是将结果放入 avar data然后将其添加到 $scope。

失败代码:

var data = $http({
    url: '/Home/GetJson',
    method: "GET",
    params: {
        clientID: cId
    }
}).success(function (data) {
    return data.members;
})

$scope.members = data;

当我查看 $scope.members 时,它在失败的代码中是空的,因为 $scope.members 在填充时是空的(js 是基于事件的)。

我怎样才能等到 json 返回 > then var = data > then $scope.members = data ?

工作代码

我使用了如下的Javascript回调函数

调用我的主要功能

DoLogin($scope, $http, email, password, AssingMemberToScope);


function DoLogin($scope, $http, email, password, callback) {
$http({
    url: '/Home/GetJson',
    method: "GET",
    params: {
        clientID: cId
    }
}).success(function (data) {
    callback($scope, data);   //<----- Call Back occurs
})
}

//--回调函数工作和代码分离--/

function AssingMemberToScope($scope, data) {
    if (data.msg) {
        $('.loading').hide();
        $scope.member = data.member;
    } else {
        $('.loading').hide();
        $('#msg').show();
    }

}
4

3 回答 3

9

试试这个模式:

angular.module('App').factory('service', function ($http) {
    var service = {
        myFunction: function (query) {
            var promise = $http({
                url: '/Home/GetJson',
                method: "GET",
                params: {
                    clientID: cId
                }
            }).success(function (data) {
                return data.members;
            });
            return promise;
        };
    }
});

然后在消费服务时,做

service.myFunction(query).then(function (data) {
    $scope.members = data.members;
});
于 2013-07-30T15:15:39.903 回答
7

我认为更好的方法是将 JSON 调用放入一个接受callback函数作为参数的函数中。快速示例:

function makeJSONCall(callback) {
    $http({
        url: '/Home/GetJson',
        method: "GET",
        params: { clientID: cId }
    }).success(function (data) {
        callback(data);
    });
}

function someFunctionCallback(param) {
    console.log(param) 
}

现在,在该callback函数中,对数据执行您想要的操作。您现在也可以在需要时调用 JSON 函数,简单即可makeJSONCall(someFunctionCallback)

于 2013-07-30T15:07:38.187 回答
2

您实际上在最后一句话中自己解释了,您可以使用 Promise 及其 then() 回调

var data = $http({
 url: '/Home/GetJson',
 method: "GET",
 params: { clientID: cId }
 })
.then(function (data) {
     return data.members;
})
};

...
...
data.then(function(response){
    //play with the data
    $scope.data=response
})
于 2013-07-30T15:15:34.200 回答