Extjs4,等待ajax请求

Extjs4,等待ajax请求,extjs4,wait,ajax-request,Extjs4,Wait,Ajax Request,我应该在单击一个按钮的过程中运行多个ajax请求,但是所有请求都应该等到第一个请求被执行。我已尝试将所有请求放入第一个请求的成功回调中,但出现以下错误: 类型错误:o未定义 返回o.id 只执行第一个请求。 这是我的代码: if(form1.isValid()) { form1.submit(me._genFormSubmitAction('my_DB','my_Action', function() { conso

我应该在单击一个按钮的过程中运行多个ajax请求,但是所有请求都应该等到第一个请求被执行。我已尝试将所有请求放入第一个请求的成功回调中,但出现以下错误:

类型错误:o未定义
返回o.id

只执行第一个请求。
这是我的代码:

    if(form1.isValid()) {
                form1.submit(me._genFormSubmitAction('my_DB','my_Action', function() {
                    console.log('form1 success');
                    //Submit Form2

                    if(form2.isValid()) {
                        form2.submit(me._genFormSubmitAction('my_DB','my_Action', function() {
                        console.log('form2 success');
}));

//Submit Form3  
.... 
_genFormSubmitAction:

_genFormSubmitAction: function(db,action, successCallback) {
    var me = this;
    return {
        clientValidation : true,
        url              : me.getApplication().apiUrl,
        waitMsg : '<p align=right>..الرجاء الإنتظار</p>',
        async:false,
        params           : {
            _module: 'administrationcassocial',
            _action: action,
            _db:db
        },
        success          : function(form, action) {
            if(action.result.success == true) {
                Ext.callback(successCallback, me);
                form.owner.destroy();
            } else {
                console.log('url=',url);
                Ext.Msg.alert(action.result.error, action.result.errormessages.join("\n"));
            }
        },
        failure          : function(form, action) {
            switch (action.failureType) {
                case Ext.form.action.Action.CLIENT_INVALID:
                    Ext.Msg.alert('Failure', 'Form fields may not be submitted with invalid values');
                    break;
                case Ext.form.action.Action.CONNECT_FAILURE:
                    Ext.Msg.alert('Failure', 'Ajax communication failed');
                    break;
                case Ext.form.action.Action.SERVER_INVALID:
                    Ext.Msg.alert(action.result.error, action.result.errormessages.join("\n"));
            }
        }
    };
}
\u genFormSubmitAction:函数(db、action、successCallback){
var me=这个;
返回{
clientValidation:对,
url:me.getApplication().apiUrl,
waitMsg:“

。p>”, async:false, 参数:{ _模块:“管理社会学”, _行动:行动, _分贝:分贝 }, 成功:功能(形式、行动){ if(action.result.success==true){ Ext.callback(successCallback,me); form.owner.destroy(); }否则{ log('url=',url); Ext.Msg.alert(action.result.error、action.result.errormessages.join(“\n”); } }, 失败:功能(形式、动作){ 开关(动作故障类型){ 案例Ext.form.action.action.CLIENT_无效: Ext.Msg.alert('Failure','Form fields不能使用无效值提交'); 打破 案例Ext.form.action.action.CONNECT\u失败: Ext.Msg.alert(“失败”,“Ajax通信失败”); 打破 案例Ext.form.action.action.SERVER_无效: Ext.Msg.alert(action.result.error、action.result.errormessages.join(“\n”); } } }; }

这是一个范围问题

form1.submit的回调发生在回调自己的范围内,因此它不知道什么是
form2

您可以尝试:

if(form1.isValid()) {
    var me = this;
    form1.submit(me._genFormSubmitAction('my_DB','my_Action', function() {
        console.log('form1 success');

        //Submit Form2
        if( me.form2.isValid() ) {
            form2.submit(me._genFormSubmitAction('my_DB','my_Action', function() {
                console.log('form2 success');
            }));
        }
    }));
}
或者我认为更合适的解决方案:

// Added aScope var
_genFormSubmitAction: function( db,action, aScope, successCallback ) {
    var me = this;
    return {    
        // ...
        scope: aScope
    }
}
然后你打电话:

form1.submit(me._genFormSubmitAction('my_DB','my_Action', this, function() {
}));

我已经试过你的第一个建议(问题中已经提到)。关于第二个命题,我还没有理解。