2016-09-13 2 views
0

Я разработал следующий код, мне нужно передать точное «это» значение (потому что много элементов с этим классом) в функцию успеха ajax. Как это сделать.Передача в функцию успеха ajax

$(document).on('click', '.address_remove_link', function(e) { 
    var id = $(this).attr("data-id"); 
    $.ajax({ 
     type: 'POST', 
     url: 'inc/controlllers/detele_shipping_addr.php', 
     data: { 
      internalId: id 
     }, 
     success: function(response, this) { 
      $(this).parent().closest('div').hide(200); 
     }, 
     error: function(data) { 
      console.log("error"); 
     } 
    }); 
}); 
+0

'this' всегда относится к призванию объект в текущей области. Чтобы получить доступ к внешней области, типичным способом является сохранение внешнего 'this' в переменной типа' var this = this; 'или' var self = this; 'или использовать привязку, как показано в [этой статье] (http: //jsforallof.us/2014/07/08/var-that-this/). – SNag

+0

@SNag: * «' this' всегда ссылается на вызывающий объект в текущей области »* Нет, это не так. Для не-стрелок, не связанных функций, 'this' означает все, что вызывал код вызова, что может быть чем угодно. –

ответ

1

вопрос потому, что область действия this изменений в функции обработчика success. Вместо этого вы можете сохранить внешнюю область в функции обработчика кликов. Попробуйте это:

$(document).on('click', '.address_remove_link', function(e) { 
    var $link = $(this); // store reference here 
    var id = $link.attr("data-id"); 

    $.ajax({ 
     type: 'POST', 
     url: 'inc/controlllers/detele_shipping_addr.php', 
     data: { 
      internalId: id 
     }, 
     success: function(response) { 
      $link.parent().closest('div').hide(200); // to use here 
     }, 
     error: function(data) { 
      console.log("error"); 
     } 
    }); 
}); 
+0

Вам лучше удалить параметр 'this' из функции' success' –

+1

@YosvelQuintero ah да, спасибо. Я даже не видел, что это было –

0

Один простой способ заключается в использовании переменной функция закрывает над:

$(document).on('click', '.address_remove_link', function(e) { 
    var $this = $(this);         // *** 
    var id = $this.attr("data-id");      // *** 
    $.ajax({ 
     type: 'POST', 
     url: 'inc/controlllers/detele_shipping_addr.php', 
     data: { 
      internalId: id 
     }, 
     success: function(response) { 
      $this.parent().closest('div').hide(200);  // *** 
     }, 
     error: function(data) { 
      console.log("error"); 
     } 
    }); 
}); 

В качестве альтернативы можно использовать Function#bind (MDN, spec):

$(document).on('click', '.address_remove_link', function(e) { 
    var id = $(this).attr("data-id"); 
    $.ajax({ 
     type: 'POST', 
     url: 'inc/controlllers/detele_shipping_addr.php', 
     data: { 
      internalId: id 
     }, 
     success: function(response) { 
      $(this).parent().closest('div').hide(200); 
     }.bind(this),          // *** 
     error: function(data) { 
      console.log("error"); 
     } 
    }); 
}); 
+0

Ваш ответ также верный – hogard

0

Вы работаете в области действия функции обработчика событий нажмите, чтобы можно было создать self переменной и использовать его как это:

$(document).on('click', '.address_remove_link', function(e) { 
    var self = $(this), 
     id = self.attr('data-id'); 

    $.ajax({ 
     type: 'POST', 
     url: 'inc/controlllers/detele_shipping_addr.php', 
     data: { 
      internalId: id 
     }, 
     success: function(response) { 
      // Do something with "response" 
      self.parent().closest('div').hide(200); 
     }, 
     error: function(data) { 
      console.log('error'); 
     } 
    }); 
}); 
Смежные вопросы