2013-10-25 1 views
0

Я использовал закрытие, чтобы установить это на этот аймакс, но теперь я, конечно, потерял «ответ». Кто-нибудь знает способ получения данных ответа в этом случае?Получение ответа при сохранении области действия «this» с помощью jquery ajax

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, так как это объект одноразовым.

Подробнее:

 Смежные вопросы

  • Нет связанных вопросов^_^