2013-06-26 2 views
1

나는 ajax 호출을하고 결과에 따라 나는 img를 swop하고 alert를 발동 할 것이다. 어느 쪽도 일어나지 않고있다. 그러나 나는 이것이 일어나지 않고있는 이유를 해석 할 수 없다??Jquery if 문을 Ajax 호출로 사용

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

문제는 콜백의 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 변수를 "이상 종료"및 콜백이 실행될 때 여전히 액세스 할 수 있습니다.

관련 문제