Javascript 从AngularJS$http get返回对象

Javascript 从AngularJS$http get返回对象,javascript,ajax,angularjs,Javascript,Ajax,Angularjs,我使用下面的代码获取json对象并将其绑定到$scope 工作代码: $http({ url: '/Home/GetJson', method: "GET", params: { clientID: cId } }).success(function (data) { $scope.members = data.members; }) 它起作用了。。我想做的是将结果放入var数据中,然后将其添加到$scope中 失败代码: var dat

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

工作代码:

$http({
    url: '/Home/GetJson',
    method: "GET",
    params: {
        clientID: cId
    }
}).success(function (data) {
    $scope.members = data.members;
})
它起作用了。。我想做的是将结果放入
var数据中
,然后将其添加到$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.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
})
}

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

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

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

现在,在
回调
函数中,对数据执行您想要的操作。您也可以在需要时调用JSON函数,一个简单的
makeJSONCall(someFunctionCallback)
就可以了。

您在最后一句话中已经解释过了,您可以使用Promissions和它们的then()回调

尝试以下模式:

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调用放在一个单独的函数中,并将数据返回到函数中,这样我就可以对它做一些事情了。我喜欢这个答案。承诺很酷,但会增加复杂性。这代表了一种更为直接的方法,可能在大多数情况下都适用。Angular 1.4中不推荐使用success(),而不是使用它use then()@zsong success方法在这里做什么?它不会将data.members返回给使用者(因为您必须再次写入data.members)
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;
});