$ (esto) no funciona en una función

El siguiente código carga contenido html de un archivo (utilicé este hilo )

 $.fn.loadWithoutCache = function (){ $.ajax({ url: arguments[0], cache: false, dataType: "html", success: function(data) { $(this).html(data); // This is not working //$('#result').html(data); //THIS WORKS!!! alert(data); // This alerts the contents of page.html } }); } $('#result').loadWithoutCache('page.html');  

Por favor, hágame saber cuál es el problema? Espero que sea algo estúpido 🙂

Editar: CORREGIR CÓDIGO

  $(document).ready(function() { $.fn.loadWithoutCache = function (){ var $el = $(this); $.ajax({ url: arguments[0], cache: false, dataType: "html", context: this, success: function(data) { $el.html(data); } }); } $('#result').loadWithoutCache('page.html'); });  

¡Gracias Jon y todos!

La función de callback ( success ) se ejecuta cuando llega la respuesta, y no se ejecuta en el ámbito del método loadWithoutCache , ya que eso ya ha finalizado.

Puede usar la propiedad de context en la llamada ajax para establecer el contexto de las funciones de callback:

 $.fn.loadWithoutCache = function (){ $.ajax({ url: arguments[0], cache: false, dataType: "html", context: this, success: function(data) { $(this).html(data); } }); } 

El problema es que dentro de la callback exitosa, this no tiene el valor que usted espera.

Sin embargo, tiene acceso a this (con el valor esperado) dentro de loadWithoutCache . Para que pueda alcanzar su objective ahorrando $(this) en una variable local y accediendo desde dentro del controlador de éxito (creando un cierre).

Esto es lo que necesitas hacer:

 $.fn.loadWithoutCache = function (){ var $el = $(this); $.ajax({ url: arguments[0], cache: false, dataType: "html", success: function(data) { $el.html(data); alert(data); } }); } 

El scope de this es incorrecto. Debe guardar this en una variable fuera de la función de éxito de ajax y hacer referencia a esa variable

  

Dentro de la callback AJAX, this está ligado a un objeto diferente. Si desea reutilizar el destino de su complemento, almacénelo (capturarlo) en una variable local y úselo.

 $.fn.loadWithoutCache = function (){ var $target = $(this); $.ajax({ url: arguments[0], cache: false, dataType: "html", success: function(data) { $target.html(data); // note change } }); } 

JQuery es esto contextual. http://remysharp.com/2007/04/12/jquerys-this-demystified/

console.log($(this)) en diferentes puntos para ver a qué se refiere.