1

我正在进行 ajax 调用,根据结果,我将打开我的 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);
                }
                });
4

1 回答 1

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)

这将“预设”回调的 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变量,并且在回调运行时仍然可以访问它。

于 2013-06-26T17:58:59.027 回答