Ajax异步加载问题
2015-10-18 20:11
267 查看
因为ajax是异步加载数据的,所以有时候在一个ajax中调用另一个ajax方法时,需要考虑两者不同步的问题。比如下面这个例子:
这里用的是knockout.js来做的数据回显。vm是viewModel,在里面定义了一个users监控数组。加载用户的ajax用来加载用户的数据,里面定义的users数组是用来填充ko里的users监控数组的。certificatesData函数先加载出所有的证书,然后找出用户拥有的证书名称,并把名称赋给users的certificate属性。将这些数据都绑定到ko里面后,用ko在form表单中进行数据回显。
解决办法是,把
//加载用户 $.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后再回显。
相关文章推荐
- 系统设计基础第六周学习总结
- 根据用户需求数据来驱动设计实例
- 界面设计需要好手绘
- [leetcode] Partition List
- 从头开始实现神经网络:入门
- 第十九篇:学习好C++需要的读的书籍
- 2D Conforming Triangulations
- 做自己的二维码设计大神
- Objective-C Foundation框架实践——NSMutableDictionary(一)
- 关于JDK在windows环境下的安装与环境变量配置的问题
- autohotkey实现自动totalcmd 8.52点击未激活提示窗口
- 假设表达式中允许包括3中括号:(,[,{,设计一个算法采用顺序栈判断表达式中的括号是否正确配对
- 一键领取免费万圣节图表素材
- Xcode的一些常用快捷键
- Codevs2822 爱在心中
- bzoj3889【Usaco2015 Jan】Cow Routing
- Hadoop配置项整理(mapred-site.xml)
- 第十八篇:C++命名空间
- RIL源码分析
- 在Ubuntu上使用Nginx+uwsgi部署django