2015-11-18 71 views
1

我需要調用從阿賈克斯成功方法onSuccessLogin方法,或將響應作爲參數爲onSuccessLogin。 謝謝你的答案。如何從嵌套ajax(成功)方法調用外部方法?

submit: function (form) { 
 

 
     $.ajax({ 
 
     type: "post", 
 
     url: "/login", 
 
     data: { 
 
      login: $(form).find('#login').val(), 
 
      password: $(form).find('#password').val(), 
 
      deviceType: environmentInfo.browser, 
 
      sdkVersion: environmentInfo.browserVersion, 
 
      osVersion: environmentInfo.OS 
 
     }, 
 

 
     success: function(res) { 
 
      localStorage.setItem("languagesList", res); 
 
      //how to call onSuccessLogin method from here? 
 
     }, 
 

 
    \t //Another implementation 
 
     // success: this.onSuccessLogin(res), - dosen't work, if I want put response from ajax into this method call 
 

 
     error: this.onErrorLogin 
 
     }); 
 
    }, 
 

 
onSuccessLogin: function() { 
 
    //localStorage.setItem("languagesList", res); get response from second implementation 
 
    window.location = "/"; 
 
}

回答

0

通過創建一個參考物體保持onSuccessLogin(可從AJAX success回調的範圍中可以看出)。

submit方法內(作爲onSuccessLogin的兄弟),該對象是this

另請參閱ES6 Arrow functions上的MDN參考 - 將this綁定到封閉範圍的抽象。

submit: function (form) { 
 

 
     var self = this; 
 
    
 
     $.ajax({ 
 
     type: "post", 
 
     url: "/login", 
 
     data: { 
 
      login: $(form).find('#login').val(), 
 
      password: $(form).find('#password').val(), 
 
      deviceType: environmentInfo.browser, 
 
      sdkVersion: environmentInfo.browserVersion, 
 
      osVersion: environmentInfo.OS 
 
     }, 
 

 
     success: function(res) { 
 
      localStorage.setItem("languagesList", res); 
 
      self.onSuccessLogin(); 
 
     }, 
 

 
    \t //Another implementation 
 
     // success: this.onSuccessLogin(res), - dosen't work, if I want put response from ajax into this method call 
 

 
     error: this.onErrorLogin 
 
     }); 
 
    }, 
 

 
onSuccessLogin: function() { 
 
    //localStorage.setItem("languagesList", res); get response from second implementation 
 
    window.location = "/"; 
 
}

+0

謝謝你,這對我有用。 – Arsenowitch

0

我不知道這個邏輯正確與否,如果你把功能AJAX循環,將工作之外。

$.ajax({ 
    url: 'test', 
    success: function(data) { 
    alert("received contents="+data); 
    onSuccessLogin(); 

} 

}); 

function onSuccessLogin() { 
     alert("Successfully logged!!!"); 
     } 
+0

previos解決方案適合我,但謝謝你的回答!) – Arsenowitch