V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
letitbesqzr
V2EX  ›  问与答

如何将原本是 ajax callback 执行的几个回调修改成按顺序执行。

  •  
  •   letitbesqzr · 2017-12-10 00:12:42 +08:00 · 2109 次点击
    这是一个创建于 2559 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 不考虑使用同步
    • 尽量对代码改动越少越少
    • 尽量使用 jquery 的 Deferred 实现

    地址: http://jsfiddle.net/1807cb0f/4/

    希望达到的效果:

    9 条回复    2017-12-13 13:27:05 +08:00
    veike
        1
    veike  
       2017-12-10 00:28:57 +08:00
    更改 DOM 结构,每条 ajax 请求执行成功后把成功信息插入到当前节点后面。
    letitbesqzr
        2
    letitbesqzr  
    OP
       2017-12-10 00:30:56 +08:00
    @veike dom 结构只是意思下,我意思是 要顺序执行 顺序的去执行这些 ajax
    veike
        3
    veike  
       2017-12-10 00:34:23 +08:00
    @letitbesqzr 你是要当每条返回成功信息之后,才进行下一条是这意思吗
    470326964
        4
    470326964  
       2017-12-10 01:38:01 +08:00
    不可能
    beforeSend:function(){
    $("#sqzr").append(e + "开始 his 预结算<br/>");
    },
    success:function(data){
    $("#sqzr").append(e + "完成 his 预结算<br/>");
    ybjs(e);
    }
    这里不是同步肯定会有其他的请求插进去
    470326964
        5
    470326964  
       2017-12-10 02:17:22 +08:00
    Yuigahama
        6
    Yuigahama  
       2017-12-10 04:28:18 +08:00
    可以看一下 promise async/await
    就是用来干这个的
    Trim21
        7
    Trim21  
       2017-12-10 06:06:18 +08:00
    async
    xqdoo00o
        8
    xqdoo00o  
       2017-12-10 14:40:09 +08:00
    let sequence = Promise.resolve();
    sequence = sequence.then(//deal item)
    suduo1987
        9
    suduo1987  
       2017-12-13 13:27:05 +08:00
    his、医保……
    你按照顺序的话有两种办法
    1、在 ajax 里面设置同步模式
    2、异步模式的话,在 beforeSend 里面声明 Deferred,在 complete 里面释放,外层用$.when().then()调用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5528 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:52 · PVG 09:52 · LAX 17:52 · JFK 20:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.