0

1 回のボタン クリックで複数の ajax リクエストを実行する必要がありますが、すべてのリクエストは最初のリクエストが実行されるまで待機する必要があります。最初のリクエストの成功コールバックにすべてのリクエストを入れようとしましたが、これにより次のエラーが発生します。

TypeError: o は未定義
です return 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"));
            }
        }
    };
}
4

1 に答える 1

0

これはスコープの問題です。

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() {
}));
于 2013-03-28T00:27:23.413 に答える