我正在进行一次ajax调用,根据结果我将swop我的img,并发出警报。这两种情况都没有发生,但我不明白为什么会发生这种情况?
var myd = "";
$.ajax({
url:"urlencode.php",
data: data,
type: "POST",
success: function(data) {
myd = $('<span />').html(data).find("#Result").text();
console.log(myd);
if (myd == 'c5:3;'){$(this).attr('src','lightbulboff.png')};
},
error: function (request, status, error)
{
alert(request.responseText);
}
});
答案 0 :(得分:1)
问题是回调中的this
值已更改;它现在是jqXHR对象。解决此问题的最简单方法是将回调绑定到当前this
值:
function(data) {
myd = $('<span />').html(data).find("#Result").text();
console.log(myd);
if (myd == 'c5:3;'){$(this).attr('src','lightbulboff.png')};
}.bind(this)
这将“预先设置”回调的此值。请注意,这在IE8中不可用,因此您需要对其进行填充。垫片可用here
解决此问题的另一种方法是“保存”this
的当前值。类似的东西:
var self = this;
$.ajax(......
success: function(){
myd = $('<span />').html(data).find("#Result").text();
console.log(myd);
if (myd == 'c5:3;'){$(self).attr('src','lightbulboff.png')};
您的回调将“关闭”self
变量,并且在回调运行时仍然可以访问它。