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

jquery 的 ajax 执行顺序问题

  •  
  •   konakona · 2014-09-12 20:50:32 +08:00 · 3275 次点击
    这是一个创建于 3520 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如有一个按钮叫“点我“,点击后执行refresh(),这个方法里还执行了一个getSid()的方法。

    但是执行顺序非常诡异,以至于$("#server_id")的值在refresh()初次执行时(第一次点按钮嘛),总是为0(该hidden input的默认值)。

    alert顺序图(上面有红色的1、2、3):


    因此,在控制台中单独输入"getSid()",alert的顺序也是很奇怪。先alert“函数执行完成”,才alert“ajax请求完毕”。

    =。。=
    14 条回复    2014-09-13 11:21:38 +08:00
    Saaee
        1
    Saaee  
       2014-09-12 20:51:46 +08:00
    ajax是非阻塞的
    Y2zz
        2
    Y2zz  
       2014-09-12 20:57:24 +08:00
    异步请求的话没顺序可言,建议用$.ajax 不要用 $.get、$.post之类的简写
    konakona
        3
    konakona  
    OP
       2014-09-12 21:02:50 +08:00
    @Y2zz
    @Saaee
    假如一次要请求多个ajax,如何保证顺序?
    cxe2v
        4
    cxe2v  
       2014-09-12 21:09:39 +08:00
    $.ajax({
    async:"false"
    })
    这样就会等这个ajax请求执行完了再执行后面的操作
    cxe2v
        5
    cxe2v  
       2014-09-12 21:11:33 +08:00
    @cxe2v 哦,那个false不要加引号
    belin520
        6
    belin520  
       2014-09-12 21:13:16 +08:00
    这样写真的好吗?写个 callback 吧
    getSid( function(){
    //do something
    })
    Coda
        7
    Coda  
       2014-09-12 21:15:16 +08:00 via iPad
    lz我歪个楼,求编辑器配色~
    robbielj
        8
    robbielj  
       2014-09-12 21:22:26 +08:00
    你这种要写callback,上面有人说了
    kmvan
        9
    kmvan  
       2014-09-12 21:47:32 +08:00
    借个楼问个问题:
    $.ajax({
    //...some params
    }).done().fail().always();

    这种写法,大家都是这样吗?手册上貌似这种写法是比较适合jq2.x的
    emric
        10
    emric  
       2014-09-12 22:15:34 +08:00
    @kmvan 没有记错的话是 1.5 之后加入的.
    promise 算是比较好的回调方法吧.. 似乎已经纳入 es6 标准.
    jarontai
        11
    jarontai  
       2014-09-12 22:23:33 +08:00   ❤️ 2
    管理多个ajax请求:
    http://jarontai.github.io/blog/2014/08/22/manage-multiple-ajax/
    ----------------------
    顺便也问一下编辑器配色主题~
    konakona
        12
    konakona  
    OP
       2014-09-13 00:16:36 +08:00
    @kmvan 这个写法很好,赞一个!就这样了~
    andy12530
        13
    andy12530  
       2014-09-13 00:19:59 +08:00
    @cxe2v
    不要教坏新人!!!

    aysnc: false,用了你就会想死。。。
    jsonline
        14
    jsonline  
       2014-09-13 11:21:38 +08:00 via Android
    @andy12530 有些其他语言转前端的人总是想着怎么把JS的异步去掉,违背Web的天性。
    我只能呵呵,随他们折腾吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1400 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 16:45 · PVG 00:45 · LAX 09:45 · JFK 12:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.