$(this)在函数中不起作用

以下代码从文件加载html内容(我使用此线程 )

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

请让我知道问题是什么? 我希望这是一个愚蠢的东西:)

编辑:正确的代码

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

谢谢乔恩和大家!

回调( success )函数在响应到达时运行,并且它不在loadWithoutCache方法的范围内运行,因为它已经结束。

您可以使用ajax调用中的context属性来设置回调函数的上下文:

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

问题是在成功回调中, this没有你期望的价值。

但是,您可以在loadWithoutCache本身内访问this (具有预期值)。 因此,您可以通过将$(this)保存到局部变量并从成功处理程序内部访问(创建闭包)来实现目标。

这是你需要做的:

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

你确定this是不正确的。 您需要this保存到ajax成功函数之外的变量,并从该变量引用它

  

在AJAX回调中, this绑定到另一个对象。 如果要重用插件的目标,请将其存储(捕获)到局部变量中并使用它。

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

JQuery这是上下文的。 http://remysharp.com/2007/04/12/jquerys-this-demystified/

console.log($(this))在不同的点上查看它所引用的内容。