2010-04-15 20 views
27

JQuery ajax başarı fonksiyonunun içinde $ (this) 'a erişemiyorum. lütfen aşağıdaki kodlara bakınız.

$.ajax({ 
      type: 'post', 
      url: '<?php echo site_url('user/accept_deny_friendship_request')?>', 
      data: 'action='+$action+'&user_id='+$user_id, 
      success: function(response){ 
       //cannot access $(this) here $(this).parent().remove(); 
      } 
     }); 

cevap

53

$(this) ne olmalıdır? Bu işlevin dışında bir referansınız varsa, bunu bir değişkene saklayabilirsiniz.

$('#someLink').click(function() { 
    var $t = $(this); 
    $.ajax(... , function() { 
     $t.parent().remove(); 
    }); 
} 
+0

Eğer varyantı ekleyemiyorsanız, örneğin: $ ('. Fileupload') gibi bir işleve eklenmiş olsaydınız, fileupload ({dataType: 'json', start: {} ... etc' – Alex

+0

'$ ('. fileupload ') '? olmalıdır. Eğer öyleyse, o zaman:' var $ t = $ ('. fileupload '). dosya yükleme (...) ' – nickf

+0

Bir soru oluşturdum: http://stackoverflow.com/questions/42285542/access-this-in-event-jquery-file-upload – Alex

0

Ben $(this) daha kolay bir şekilde başka bir şey başvuran elemanını bir sınıf veya id ve referans vermek olacaktır göremiyorum jquery o:

yerine:

$(this).parent().remove(); 

Yapabilirsin yapın:

$('#element_id').parent().remove(); 

Not: Burada bir eleman/yineleme ile çalıştığınızı varsayalım.

+0

$ (Bu) başvurulan kodu dahil etmedim. ama $ ('# element_id') altındaki gibi bir şey olurdu .. (işlev() {$. ajax ({...})}); – Yalamber

4

işlevi içinde this kapsamını değiştirmek için, $.proxy aramayı deneyin:

$.ajax({ 
    success: $.proxy(function(response) { $(this).parent().bla(); }, $(this)); 
}); 
50

Kontrol dışarı bağlam seçeneği - Benim için mükemmel çalışıyor:

$.ajax({ 
    context: this, 
    type: 'post', 
    url: '<?php echo site_url('user/accept_deny_friendship_request')?>', 
    data: 'action='+$action+'&user_id='+$user_id, 
    success: function(response){ 
     //can access this now! 
    } 
}); 
+13

Bu kabul edilen cevap olmalı, şu anda kabul edilen cevap bir kesmek gibi görünüyor –

+0

Bu belgelere göre doğru seçimdir katılıyorum. Ben $ .Jax yerine $ .post kullanırken bağlam çözümünü kullanamadığım için bir hata üretir: "Uncanught TypeError: Yasadışı çağrı" jQuery v1.11.3 çalıştırıyorum ve çağırma hatasının olduğunu anlıyorum. prototip işlevi ile ilgili çağrılıyor, ancak patlayan çizgiyi bulduktan sonra bile düzeltemedim.Bu, $ .post ile $ .ajax arasında bir fark daha var gibi görünüyor. İşlev üzerindeki kapsamı içerecek şekilde tanımlanmış bir değişken kullanmak, o özel durumda çalışan çözümdür. –

+0

Brian Layman - meraktan dolayı, neden $ .ajax kullanmıyorsunuz? –

3

Eğer this istiyorsanız ajax çağrınızın bağlamında this olmak için .bind()'u aşağıdaki gibi kullanabilirsiniz:

$.ajax({ 
    url: 'some_url' 
    success: function(data) { 
    // do something 'this' 
    }.bind(this) 
}) 

Dışarıda this için başarı callback'inde içindeki this değerini bağlar.

İlgili konular