2013-03-27 2 views
0

Я должен запускать несколько запросов ajax одним нажатием кнопки, но все запросы должны ждать, пока не будет выполнен первый. Я пытался поставить все запросы в успех обратного вызова первого, но это дает эту ошибку:Extjs4, wait for ajax request

TypeError: o is undefined
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")); 
      } 
     } 
    }; 
} 

ответ

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() { 
})); 
+0

Я уже попробовал свое первое предложение (это упомянутых в вопросе). Следуя второму предложению, я не справился с этим. – Aminesrine