$(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))
在不同的点上查看它所引用的内容。