2013-10-25 96 views
0

我使用閉包來將此設置爲_這是ajax成功的內部,但現在我當然丟失了「響應」。任何人都知道在這種情況下檢索響應數據的方法?使用jquery ajax保留「this」範圍的同時獲取響應

var form = {  
    name: 'great form',  
    load:function() { 
     $.ajax({ 
     url: "get/data", 
     type: "POST", 
     success: function(_this){ 
       console.log(_this.name);  // outputs : "great form" 
       console.log(response.data); // response is undefined 
     }(this) 
    }); 
}; 

回答

1

你不想改變參數的成功處理程序。成功處理程序的第一個參數是您的ajax響應數據,因此您需要像這樣對待它。

要訪問成功處理程序中的this指針,有幾種方法。一個我認爲是最優雅的是,jQuery的可以讓你在你想要如下所示this在你的成功回調作爲參數的$.ajax()功能之一設置上下文傳遞:

var form = {  
    name: 'great form',  
    load:function() { 
     $.ajax({ 
     context: this,  // sets 'this' pointer for success callback 
     url: "get/data", 
     type: "POST", 
     success: function(response){ 
       console.log(this.name);  // outputs : "great form" 
       console.log(response.data); // ajax response data 
     }); 
    }); 
}; 
+0

我生活改變了這一刻,謝謝提示 – Sych

+0

輝煌!不能相信我從來不知道上下文參數。回到這個,沒有更多的!謝謝!! – user240880

1

你不想_this作爲成功函數的參數(和你這樣做是調用函數立即,而不是等待jQuery來調用它成功的方式),你創建它如沿着ajax調用一個變量:

var form = {  
    name: 'great form',  
    load:function() { 
     var _this = this; // <=== Here 
     $.ajax({ 
     url: "get/data", 
     type: "POST", 
     success: function(response){ 
       console.log(_this.name);  // outputs : "great form" 
       console.log(response.data); // response is undefined 
     } 
    }); 
}; 

當然,與該代碼,你可以只使用form.name,因爲它是一個一次性的對象。

更多: