ExtJS 4.1 - 在不使用同步请求的情况下按顺序处理XHR

时间:2012-11-08 20:59:34

标签: javascript ajax extjs xmlhttprequest

我的应用程序由复杂的数据库体系结构支持,外部密钥限制很多,导致我的JavaScript充斥着callback处理程序。对于单个操作,例如创建新订单,可能需要多达三个XHR才能提交所有必要的数据以进行处理。

目前,我正在处理这个问题,我认为这是一种相当不合理或者至少有点草率的意思......

/** -- PSEUDO CODE -- */
myOrder.save({
    success: function()
    {
         /** This request handled inserting the main attributes of the model
             into the database, which means it is safe to fire off additional
             requests */
         myOrderContents.store.sync({
                success: function()
                {
                    /** Possibly fire another request here, that is dependent on
                        the first two requests returning successfully, or maybe
                        execute code that is also dependent on these requests.
                      */
                }
         });
    },
    failure: function()
    {
    /** Handle Failure Here */
    }
});

我意识到另一种可行的方法就是调用一个回调方法的所有请求,这只会执行一段代码....

myOrder.save({callback: executeAfterRequests});
myOrderContents.store.sync({callback: executeAfterRequests});
myOtherObject.save({callback: executeAfterRequests});

executeAfterRequests: function()
{
    if(requestA.isComplete() && requestB.isComplete() && requestC.isComplete())
    {
    /** Execute some code after all requests have been completed... */
    }
}

鉴于ExtJS开发人员强烈反对同步请求,我最好选择扩展基础AJAX类并实现队列?或者,接受AJAX的本质并继续我的快乐方式与嵌套的success功能?

感谢您的投入。

2 个答案:

答案 0 :(得分:1)

为什么不将所有需要的数据一起发送到服务器?您可以在服务器上按步骤创建记录,并在完成所有操作后返回。 有一些表格向导的示例可以让用户通过屏幕收集数据的漫长过程,但最后提交所有这些。

答案 1 :(得分:0)

是的,我会使用一个队列助手,你可以将你的函数放入其中并一个接一个地执行它们。

您可能应该查看可用的工具,看看其中一个是否符合您的需求,显然thereseveralthem。不幸的是,我认为,它们中没有一个被接受为标准技术。