1
나는이 같은 설정 간격으로 기능 한 -방법 참조에서 콜백 함수로 잡기는
RestClient = window.RestClient || {};
(function (w, rs) {
rs.invokeRemoteService = function (postData, successCallBack, errorCallBack){ //label-1, successCallback and errorCallback are undefined
$.ajax({
url : '/some/url/',
dataType : "json",
data :{
cmd: ko.toJSON(postData)
},
type : "post",
async : true,
success : function(data) { //label-2, get data ok
if (typeof successCallBack === "function") { //label-3, successCallBack is undefined
successCallBack(data); //label-4
}
},
error : function() {
if (typeof errorCallBack === "function") {
errorCallBack(); //label-5
}
}
});
};
})(window, RestClient);
- 여기
setInterval(function(){
var postData = {'some json data'};
var successCallback = function(data) {
console.log(data);
}
var errorCallback = function(data) {
console.log(data);
}
RestClient.invokeRemoteService(postData, this.successCallback, this.errorCallback);
}, 10000);
그리고는 (다른 파일에서) RestClient
의에서 내 invokeRemoteService()
방법 그러나 setInterval()
메서드에서 RestClient.invokeRemoteService()
메서드를 호출하면 항상 successCallback
및 errorCallback
에 대해 label-1
, label-3
및 label-5
에 '정의되지 않음'이 표시됩니다. 서비스 호출이 완벽하게 완료되었지만 올바른 데이터가 label-2. The
RestClient.invokeRemoteService() work fine for other. But when I call it from
setInterval()`에서 작동하지 않습니다. 도와주세요.
감사합니다. 하지만 저는 자바 스크립트를 처음 사용하기 때문에 'this'를 사용할 때 왜 작동하지 않는지 이해할 수 없습니다. 약간 설명해 주실 수 있습니까? – Razib
'this'는 함수 호출자 _context_에 접근하기 위해 사용됩니다. 대부분의 경우 전역 컨텍스트 ('window')이며 함수가 객체 메소드 인 경우 해당 객체 인스턴스입니다. 귀하의 경우에는 _scope_/_closure_의 변수를 참조하려고하는데, 이는 'this'를 사용하지 않고 직접 수행됩니다. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this 및 https://stackoverflow.com/questions/3127429/how-does-the-this-keyword-work를 참조하십시오. – ghybs