Mootools XHR请求:同步和/或链式

Mootools XHR request: synchronous and/or chained?

本文关键字:同步 XHR 请求 Mootools      更新时间:2023-09-26

我有几个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?同步执行它更好吗?这样我就确信在此期间没有其他东西执行?两者都用怎么样,这有意义吗?

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

第一条公理-您正在重用您的请求实例,而不是创建新实例。即使不是,它也可以使用async。例如,如果你有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();

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

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