2013-03-27 164 views
0

我应该在一个按钮点击运行多个ajax请求,但所有的请求应该等到第一个执行。我曾试图把所有请求中的第一个成功的回调,但是这给了这个错误:Extjs4,等待ajax请求

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 2013-03-28 18:17:03