从AngularJS$http get返回对象

Return object from AngularJS $http get

本文关键字:返回 对象 get http AngularJS      更新时间:2023-09-26

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

工作代码:

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

它有效。。我想做的是将结果放入var 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返回>然后var=data>然后$scope.member=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();
    }
}

试试这个模式:

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

我认为更好的方法是将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)就可以了。

实际上,您在最后一句话中已经自己解释过了,您可以使用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
})