我正在开发一个JavaScript应用程序,它必须通过AJAX执行两个单独的检查。根据每次检查的结果,行为会有所不同。我感兴趣的案例是当两个检查都成功时。我已经确定了一些方法来做到这一点,我想从SO那里得到一些反馈,他们认为最好的方法是什么。
-
同步AJAX调用:这是我继承的,它已经不存在了。它会导致浏览器和系统锁定,尽管它允许您在单个执行线程中处理响应。
-
菊花链:进行AJAX调用以执行第一次检查,如果通过,则在第一次检查的回调中执行第二次检查。处理第二次检查,如果通过,我们就成功了。这是最简单的解决方案,但它会不必要地将我的两项检查结合起来。我还觉得序列化检查是不必要的,会降低性能。
-
自定义事件:使用YUI的
Event
模块和自定义事件实用程序,同时触发两个AJAX调用。为每个成功案例创建一个自定义事件,并让处理AJAX响应的回调为每个成功检查抛出相应的事件。然后,每个事件的处理程序都可以订阅另一个事件,如果抛出该事件,则表示我们已成功完成。
我的问题与第三种方法有关,这是我喜欢的方法。我喜欢我的处理程序只通过抛出的事件连接,并且AJAX调用可以同时发生。我想知道的是,还有其他人以这种方式使用过这个模块吗?我能预料到什么样的陷阱?我担心我可能已经为自己设定了一个比赛条件——我怎样才能缓解这种情况?最后,对于读过这篇文章的人来说,有没有更好的方法?我的列表是否不完整,或者设计是否存在根本缺陷?建设性的批评和评论是非常受欢迎的。
编辑:虽然服务器请求确实使用会话,但它们彼此无关,并且不写入会话数据,因此没有理由不在服务器上并行执行它们(除非PHP会话有一些限制,我不知道)。我们也会进行服务器端检查,但我们发现在某些重要事件之前,我们需要立即与服务器进行检查,以便在罕见的事件中通知用户发生了变化。