2011-02-23 4 views
53

yayQuery 팟 캐스트의 11 번째 버전은 $.ajax context option을 언급합니다. 성공 콜백에서이 옵션을 어떻게 사용합니까? 현재 수행중인 작업은 입력 매개 변수를 성공 콜백에 전달하여 성공/오류 발생 후 호출 된 ID에 애니메이션을 적용 할 수 있도록하는 것입니다. 컨텍스트 옵션을 사용하면 아마도 호출 된 루틴에서 매개 변수를 다시 전달할 필요가 없습니다. 이 예에서

, 나는 상태가 DOM에서 제거 있도록 데이터베이스에서 삭제 된 후에는 성공 필드에 다시 STATEID를 전달합니다

$('td.delete').click(function() { 
    var confirm = window.confirm('Are you sure?'); 
    if (confirm) { 
    var StateID = $(this).parents('tr').attr('id'); 
    $.ajax({ 
     url: 'Remote/State.cfc', 
     data: { 
     method: 'Delete', 
     'StateID': StateID 
     }, 
     success: function(result) { 
     if (result.MSG == '') { 
      $('#' + result.STATEID).remove(); 
     } else { 
      $('#msg').text(result.MSG).addClass('err');; 
     }; 
     } 
    }); 
    } 
}); 

답변

105

는 모든 context가하는 것입니다의 값을 설정합니다 콜백에 this이 있습니다.

그래서 당신은 이벤트 처리기에있어, 당신은 이벤트를받은 요소로 콜백에서 this을 원한다면, 당신은 할 줄 :

context:this, 
success:function() { 
    // "this" is whatever the value was where this ajax call was made 
} 

당신이 다른되고 싶어하는 경우 승을

context:{some:'value'}, 
success:function() { 
    // "this" the object you passed 
    alert(this.some); // "value" 
} 

을 당신이 질문에 추가 한 코드, 당신은 StateID을 사용할 수에서, 그러나 : 유형, 그냥 설정하고 this는 참조합니다 당신은 이미 그 변수에 접근 할 수 있기 때문에 정말로 필요 없습니다. 상황에 맞는 옵션을 설정하면

var StateID = $(this).parents('tr').attr('id'); 
$.ajax({ 
    url: 'Remote/State.cfc' 
    ,data: { 
     method:'Delete' 
     ,'StateID':StateID 
    } 
    ,context: StateID 
    ,success: function(result){ 

     alert(this);  // the value of StateID 
     alert(StateID); // same as above 

     if (result.MSG == '') { 
      $('#' + result.STATEID).remove(); 
     } else { 
      $('#msg').text(result.MSG).addClass('err');; 
     }; 
    } 
}); 
+3

오, 확인. 감사! 나는 아직도 내가 생각하는 변수 범위를 파악하고있다. –

+1

@cf_PhillipSenn : 천만에요. 그래, 까다로울 수있어. 아마도'context :'의 가장 보편적 인 사용은 콜백 내부에'this'의 값을 그대로 유지하려는 첫 번째 해결책 일 것입니다. – user113716

+1

@ user113716 그래서 나는이 두 가지 중 하나를 내 아약스 전화에 넣을 수있는 옵션을 가지고있다. 'context : {parent_group : parent_group, container : container}' 'context : this' 그리고 나서'console.log this.parent_group)', 둘 다 작동해서는 안됩니까? 첫 번째 사람 만 지금 일하고 있습니다. –

11

, 다음 성공에 thiscontext에 대한 값으로 설정 무엇이든 될 것입니다. 따라서 입력 매개 변수 이름과 값을 컨텍스트로 포함하는 객체 리터럴을 전달하면 this.param1을 사용하여 첫 번째 입력 매개 변수의 값을 얻을 수 있습니다.

자세한 내용은 .ajax() 문서를 참조하십시오.