2012-02-14 131 views
0

我有几个XHR请求,它们是由Mootools Request类处理的。这门课提供了一些选项来适当地处理请求。我在做什么:Mootools XHR请求:同步和/或链接?

  1. XHR:邮政表单数据
  2. XHR:刷新主窗格
  3. XHR:刷新subpane

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

  1. link可以设置为chain,以“链”它们,或者,作为武文档状态的选项:

    作出启动任何电话而请求正在运行时会被链接起来,并且会在当前请求结束后立即发生。

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

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

除了浏览器冻结的部分,究竟是什么区别?我应该使用哪一个请求否。 1?同步执行它会更好吗,所以我确定在此期间没有其他任何执行?如何使用两者,这是否有意义?

回答

4

好。 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(); 
+0

感谢这个见解;我没有意识到链接与实例相关的事实 - 它没有考虑到其他实例。基于此,我认为同步发布内容是我最安全的选择,因此可能触发另一个请求的延迟请求不会在中间。 – kasimir 2012-02-14 16:53:13

+0

或重用您的请求实例。你也可以设置链接:“取消”,以确保只有一个onComplete最终会触发 - 但它不能阻止多个POST/GET请求。 – 2012-02-14 17:14:13

+0

我想我可能会重用一些请求实例,但就发布而言,我认为同步进行更加“不错”,而其缺点(干扰浏览器)并不是那么大,考虑到我实际上希望将所有内容在发布发布时暂停(并且在其中'状态'如此说,改变)。 – kasimir 2012-02-15 08:30:22

0

被链接的请求是异步的,当一个请求结束时它会触发第二个请求等等,这样你就可以有几个请求,而不会同时堵塞浏览器和所有的请求。

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