【问题标题】:Mootools XHR request: synchronous and/or chained?Mootools XHR 请求:同步和/或链接?
【发布时间】:2012-02-14 15:39:18
【问题描述】:

我有几个 XHR 请求,它们由 Mootools Request 类处理。此类提供了一些选项来适当地为请求计时。我在做什么:

  1. XHR:发布表单数据
  2. XHR:刷新主窗格
  3. XHR:刷新子窗格

当然,请求 2 和 3 必须在 1 完成之前等待。所以这些是在onComplete 事件处理程序中触发的。但是,Request 类提供了处理多个 XHR 请求的选项。我的问题是关于这两个:

  1. 选项link 可以设置为chain,以便“链接”它们,或者,如 Moo 文档所述:

    在请求运行时发起的任何调用都将被链接起来,并且会在当前请求完成后立即执行,一个接一个。

  2. 选项async可以设置为false,防止后面的请求执行。根据 Moo 文档:

    如果设置为 false,请求将是同步的,并在请求期间冻结浏览器。

除了浏览器冻结部分,具体有什么区别?我应该使用哪一个作为请求编号。 1?同步执行是否更好,所以我确定在此期间没有其他任何执行?两者都用怎么样,有意义吗?

【问题讨论】:

    标签: javascript xmlhttprequest mootools


    【解决方案1】:

    好吧。 link:chain 和 async:false 的区别很简单。

    第一条公理 - 您正在重用您的请求实例,而不是创建一个新实例。即使您不是,它也可以与异步一起使用。例如,如果你有async: false,那么这个代码:

    new Request({async:false}).send();
    
    // this one below will not run until the UI thread has finished
    new Request({async:false}).send();
    
    // nor will this
    somefunc();
    

    如果你选择链条:

    var req = new Request({link: "chain"});
    
    req.send();
    // this won't run until the previous request has completed:
    req.send();
    // this will run independently of the above and may finish first as
    // they are not synchronous and this is a brand new instance.
    new Request().send();
    

    【讨论】:

    • 感谢您的洞察力;我不知道链接链接到实例的事实 - 它没有考虑其他实例。基于此,我认为同步发布内容是我最安全的选择,因此可能触发另一个请求的延迟请求不会进入中间。
    • 或者,重用您的请求实例。您还可以设置 link: "cancel" 以确保最终只会触发一个 onComplete - 但它不能阻止多个 POST/GET 请求。
    • 我想我可能会重用一些请求实例,但至于发布,我想同步进行更“防傻”,并且考虑到我的缺点(干扰浏览器)并没有那么大实际上想要在发布时暂停所有内容(并且可以说“状态”发生变化)。
    【解决方案2】:

    链接的请求是异步的,当一个结束时会触发第二个,依此类推,因此您可以同时处理多个请求,而不会同时被所有请求阻塞浏览器。

    链接的请求不会冻结您的浏览器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 2012-04-07
      • 2016-06-11
      • 2016-06-23
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      相关资源
      最近更新 更多