使用ajax调用Jquery if语句

时间:2013-06-26 17:56:45

标签: ajax if-statement

我正在进行一次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);
                }
                });

1 个答案:

答案 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变量,并且在回调运行时仍然可以访问它。