Ajax异步加载问题

因为ajax是异步加载数据的,所以有时候在一个ajax中调用另一个ajax方法时,需要考虑两者不同步的问题。比如下面这个例子:

//加载用户
                $.ajax({
                    url : 'user/findUserById',
                    type : 'POST',
                    data : {userId:'${param.uid}'},
                    success:function(data){
                    var users = [{user:data,role:'',certificate:''}];
                        users[0].role=rolesData(data);
                        certificatesData(data,users);
                        //vm.users(users);
                    }
                });


//处理证书信息
    function certificatesData(user,users){
      $.ajax({
        url : 'certificate/getAllCertificate',
        type : 'post',
        success:function(data){
            var arr = eval('('+data+')');
            for(var i=0;i<arr.length;i++) {
                if(user.certificate_id == arr[i].id) {
                    users[0].certificate =  arr[i].name;
                }
            }
            vm.users(users);
        }
     });
    }

这里用的是knockout.js来做的数据回显。vm是viewModel,在里面定义了一个users监控数组。加载用户的ajax用来加载用户的数据,里面定义的users数组是用来填充ko里的users监控数组的。certificatesData函数先加载出所有的证书,然后找出用户拥有的证书名称,并把名称赋给users的certificate属性。将这些数据都绑定到ko里面后,用ko在form表单中进行数据回显。
vm.users(users);用来绑定数据,一开始是在加载用户的ajax的success函数中执行的。但这样做在表单中是显示不出证书的数据的。因为两个ajax是异步执行的,ko在表单回显结束后,certificatesData函数还没有加载完证书数据,所以ko中是没有证书 的数据的。
解决办法是,把vm.users(users);这一步放在certificatesData函数的success方法中执行,这样才能保证证书数据能够放到viewModel后再回显。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值