использовать $ (this) в jquery обратного вызова ajax

#javascript #jquery

#javascript #jquery

Вопрос:

я выполняю jQuery.post для php-файла, и файл возвращает мне значение.

вопрос в том, почему $(this) dosent работает в функции обратного вызова? любое предупреждение, передающее что-либо для показа, используя $(this) , возвращает меня null

 $(".class").live("focusout", function(){

    jQuery.post("phpfile.php",
       {
           someValue: someValue
       },
       function(data)
       {
             // why the $(this) dosent work in the callback ?
       }                

    )

});
  

Ответ №1:

В этом случае this это уже не тот объект. Сохраните ссылку до и используйте позже:

 $(".class").live("focusout", function(){
    var $this = $(this);
    jQuery.post("phpfile.php",
       {
           someValue: someValue
       },
       function(data)
       {
           // 'this' inside this scope refers to xhr object (wrapped in jQuery object)
           var x = $this;
       }                
    )
});
  

Комментарии:

1. Предпочтительно использовать .ajax() вместо .post() , чтобы вы могли задать context параметр.

Ответ №2:

 $(".class").live("focusout", function(){
    var this = $(this);
    jQuery.post("phpfile.php",{
       someValue: someValue
   },function(data){
        // Now use this instead of $(this), like this.hide() or whatever.
   })
});
  

$ (this) в вашем примере, я думаю, ссылался на $.post.

Комментарии:

1. Добавьте var объявление перед вашим this вызовом, иначе this переменная попадет в глобальную область видимости.