2010-04-15 18 views
27

Parece que no puedo acceder a $ (esto) dentro de la función de éxito de jquery ajax. por favor vea el código a continuación.

$.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(); 
      } 
     }); 

Respuesta

53

¿Cuál debe ser $(this) ser? Si tiene una referencia fuera de esa función, puede almacenarla en una variable.

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

¿Qué sucede si no puede agregar la var porque está envuelta en una función como: '$ ('. Fileupload'). Fileupload ({dataType: 'json', start: {} ... etc' – Alex

+0

por lo que debería ser '$ ('. fileupload')'? Si es así, entonces: 'var $ t = $ ('. fileupload'). fileupload (...)' – nickf

+0

He creado una pregunta: http://stackoverflow.com/questions/42285542/access-this-in-event-jquery-file-upload – Alex

0

no puedo ver nada más que hacer referencia $(this) manera más fácil sería dar al elemento una clase o Identificación y referencia que a partir de jQuery:

En lugar de:

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

Usted podría hacer:

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

Nota: Supongo que se trata de un elemento/iteración.

+0

No he incluido el código $ (esto) hace referencia a. pero sería algo como below $ ('# element_id'). click (function() {$. ajax ({...})}); – Yalamber

4

intentar llamar a $.proxy, para cambiar el alcance de this dentro de la función:

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

Mira la opción de contexto - funciona perfectamente para mí:

$.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

Esto debería haber sido la respuesta aceptada, la respuesta aceptada actualmente parece un truco –

+0

Acepto que esta es la elección correcta según la documentación. experiencia No he podido usar la solución de contexto al usar $ .post en lugar de $ .ajax. Produce un error: "UnEught TypeError: invocación ilegal". Estoy ejecutando jQuery v1.11.3 y entiendo que el error de invocación es relacionado con la función de prototipo que se está llamando, pero no pudo arreglarlo incluso después de encontrar la línea que estaba explotando. Esto parece ser una diferencia más entre $ .post y $ .ajax. Usar una variable, definida para tener un alcance sobre la función, era la solución de trabajo en esa situación particular. –

+0

Brian Layman - por curiosidad, ¿por qué no usar $ .ajax en su lugar? –

3

Si desea this para ser this en el contexto de su llamada ajax, también puede usar .bind() de la siguiente manera:

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

Se une el valor de this dentro de la devolución de llamada de éxito a this exterior.

Cuestiones relacionadas