Web サービスとやり取りするための Javascript SDK を作成しています。AJAX 呼び出しを行うために jQuery を使用しています。
AJAX 呼び出しが失敗した場合、.js ファイルの先頭で呼び出される ajaxError のイベント ハンドラーを登録しました。私の問題は、理由がわかりませんが、呼び出されたときに、Akamanda.Client のクラス メンバー変数にアクセスする方法がないことです。
Akamanda.Client の別のメソッドを .prototype.logError として追加しようとしましたが、これは jQuery Ajax ハンドラーによって呼び出されましたが、それでも (this.logging) のテストは失敗しました。
jQuery コールバックからクラス メンバー変数にアクセスするにはどうすればよいですか? ここで何が理解できていないのですか?Akamanda.Client.logging は ajaxError コールバックから未定義です。
SDK の私のコード:
$(document).ajaxError(function(event, jqxhr, settings, exception) {
// more robust error handling for different conditions
if (Akamanda.Client.logging) {
console.log('FAILED: ' + settings.type + ' ' + settings.url + ' => ' + exception);
}
});
Akamanda.Client = function(options) {
this.URL = options.URL || 'http://m-test.akamanda.com';
this.baseURL = this.URL + '/api/' + Akamanda.API_VERSION;
this.feedsURI = '/websyndication/feed/';
// who is the client? (iphone/android/web)
this.clientName = options.clientName;
// For development: Logging and buildcurl IS ON, for production: OFF
//this.logging = options.logging || true;
this.logging = true;
// called when a user is not authorised (Disabled)
// this.logoutCallback = options.logoutCallback || null;
}
Akamanda.Client.prototype.getFeeds = function(callback){
var feeds = [];
$.getJSON(this.baseURL + this.feedsURI, function(data) {
$.each(data, function(index, feed) {
feeds[index] = {
name: feed.name,
title: feed.title,
link: feed.link
};
})
callback(feeds);
});//.error(function(err) { (disabled at the moment in favour of ajaxError event)
// console.log('Error: ' + err.error);
// });
}
クライアント用の私のコード (別の JS ソース ファイル内):
var options = { logging: true };
myAPI = new Akamanda.Client(options);
var feeds = [];
var articles = [];
function getFeeds()
{
myAPI.getFeeds(function(AkamandaFeeds) {
feeds = AkamandaFeeds;
showFeeds();
});
}