2013-03-27 2 views
0

Je devrais exécuter plusieurs requêtes ajax en un clic, mais toutes les requêtes doivent attendre que la première soit exécutée. Je l'ai essayé de mettre toutes les demandes dans le rappel de succès de la première mais cela donne cette erreur:Extjs4, attente d'une requête ajax

TypeError: o is undefined
return o.id;

Et la première requête est exécutée.
Ceci est mon code:

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")); 
      } 
     } 
    }; 
} 

Répondre

0

Ceci est une question de portée. Le callback de form1.submit se produit dans la portée de callback, donc il n'a aucune idée de ce qu'est form2.

Vous pouvez essayer:

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'); 
      })); 
     } 
    })); 
} 

Ou la solution la plus appropriée à mon avis:

// Added aScope var 
_genFormSubmitAction: function(db,action, aScope, successCallback) { 
    var me = this; 
    return {  
     // ... 
     scope: aScope 
    } 
} 

Ensuite, vous appelez:

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

J'ai déjà essayé votre première proposition (il est mentionné dans la question). Concevant la seconde proposition, je n'ai pas manqué de le comprendre. – Aminesrine