我有这段代码
$.post("recommend.php",{"jid":jid,"vid":vid,"eid":eid},function(data){
if(data=="1")
{
$(this).text("Recommended");
}
else
{
$(thelink).text("Recommend");
}
});
帖子正确执行但链接上的文字没有改变,虽然数据等于1.任何帮助......
答案 0 :(得分:5)
this
指当前上下文。在你的AJAX回调中,它与你的一个调用函数不同。
但是,您只需使用var $this = $(this);
保留它,然后在回调中使用$this
而不是$(this)
;
var $this = $(this);
$.post("recommend.php", {
"jid": jid,
"vid": vid,
"eid": eid
}, function (data) {
if (data == "1") {
$this.text("Recommended");
} else {
$(thelink).text("Recommend");
}
});
当然,另一个名字也可以。例如,要保留普通this
许多人使用self
或that
。
另一种解决方案是使用$.ajax({ context: this, ...... }));
在回调中保留相同的上下文(如果未指定,this
指向传递给$.ajax()
的选项对象
答案 1 :(得分:3)
在调用$.post
var that = $(this);
$.post(..., function() {
that.myFunction();
}
答案 2 :(得分:1)
默认情况下,AJAX回调中的this
是请求的jqXHR
对象。
您应该缓存对链接的引用(如您对thelink
所做的那样)或使用context
选项$.ajax
:
$.ajax({
url: "recommend.php",
type: 'POST',
data: {
"jid": jid,
"vid": vid,
"eid": eid
},
context: this,
success: function (data) {
if (data == "1") {
$(this).text("Recommended");
} else {
$(thelink).text("Recommend");
}
}
});
context
选项设置回调函数的上下文 - 即它在其中定义this
。通过将其设置为this
的外部值(对链接的引用),您可以在回调中访问$(this)
的链接。