大家好, 不怎么深入 js, 对运行顺序有点疑惑。 意图是: 有三个下拉菜单,二级菜单想通过一级菜单选中的选项去服务器拿数据然后作为选项, 同样三级菜单根据二级菜单的被选中的选项去服务器拿数据作为选项。
有两个函数, update_data1, 更新二级菜单选项, update_data2, 更新三级菜单选项,
函数里面差不多是这种形式。
$.get(url, function(data, status){
$("#menu").html(data);
})
但是用下面代码执行的时候第二个函数取到的二级菜单被选中的选项还是初始值, 而不是前一个函数处理完的服务器传回来的值。
$(document).ready(function(){
update_data1();
update_data2();
})
是需要对 callback 进行处理吗?查了一下 js 执行顺序,看到好多声明式函数跟赋值式函数的执行顺序,但感觉应该不是这种导致的吧? 求指教, 谢谢。
1
lonelinsky 2017-04-14 19:40:18 +08:00
把 update_data1 作为第一个下拉框的 onchange 回调函数,同理 update_data2 作为第二个下拉菜单的 onchange 回调函数
|
2
dingz 2017-04-14 19:40:22 +08:00 via Android
promise 串联
|
3
spoonwep 2017-04-14 19:57:29 +08:00 via iPhone
你需要 propromise 或者 async/await
|
4
cheerzeng OP |
5
SourceMan 2017-04-14 20:10:37 +08:00 via iPhone
异步嘛
|
6
cuzfinal 2017-04-15 08:22:38 +08:00 via Android
setTimeOut(()=>{update_data2();},0)
|
7
zhangolve 2017-04-20 22:30:39 +08:00
看楼主的描述和使用 jQuery ,我感觉这个时候其实也没有必要像楼上几位说的,用 promise ,个人理解 promise 在控制多个异步请求并发或者是竞速,也就分别对应 promise.all 和 promise.race 还是很强大的,但是看楼主的描述,感觉既然是用了 jq ,直接再套一层,可能对楼主已经有了 jq 经验,无需学习 promise 更加快,而且同样能达到异步控制。
把以前写的个小例子改了改,可以看看。 https://codepen.io/zhangolve/pen/EmKKxB 可能说的不对,欢迎指出吧。 |
8
zhangolve 2017-04-20 22:35:34 +08:00 via Android
不过话说回来,我一看都六天前的帖子了,应该也都解决了吧
|