ajax返回值给上层函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax返回值给上层函数相关的知识,希望对你有一定的参考价值。

var UserModule = angular.module("UserModule", []);

//用户收货地址服务
UserModule.factory("UserAddress", function ($http, $rootScope) {
    var AddressList = undefined;
    return {
        GetAddressList: function () {
            if (!AddressList) {
                $http.post("/api/addressController/dataGridAddress", { user_id: $rootScope.user.id }).success(function (data) {
                    if (data.success) {
                        AddressList = data.obj.rows;                       
                    }
                })
            }
            return AddressList;
        }
    }
})

UserModule.controller(‘AddressListCtrl‘, function ($scope, $http, UserAddress) {
     $scope.AddressList=UserAddress.GetAddressList();
});

上面代码有问题,$http.post是异步执行的,return AddressList;在AddressList = data.obj.rows;之前执行$scope.AddressList拿到的是undefined;

正确代码:

UserModule.factory("UserAddress", function ($http, $rootScope) {
    var AddressList = undefined;
    return {
        GetAddressList: function (callback) {
            if (!AddressList) {
                $http.post("/api/addressController/dataGridAddress", { user_id: $rootScope.user.id }).success(function (data) {
                    if (data.success) {
                        AddressList = data.obj.rows;
                        callback(AddressList);
                    }
                })
            } else {
                callback(AddressList);
            }

        }
    }
})

UserModule.controller(‘AddressListCtrl‘, function ($scope, $http, UserAddress) {
    UserAddress.GetAddressList(function (data) {
        $scope.AddressList = data;
    })
});

 

以上是关于ajax返回值给上层函数的主要内容,如果未能解决你的问题,请参考以下文章

ajax传值和返回值问题: 能够从前台传值给后台,但是后台的值怎么传给前台呢? 代码见补充(求详细解答

ajax 后台如何返回值给前台,详情见如下

jQuery $.get(url,data,callback,type) 返回值给全局变量赋值的问题

jQuery Ajax传值给Servlet,在Servlet里接受参数乱码的解决方法

js中函数判断其他函数返回值是不是符合条件,返回值给按钮的DISABLED属性

为啥这段js代码设置断点单步调试能够走通,得到结果;但取消断点直接运行就不行了?