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() `が正しく機能していません。助けてください。
ありがとうございます!しかし、私はjavascriptを初めて使っているので、なぜ私が '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