2013-03-27 163 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