こんにちは、私はかなりの回数実行されるコードを持っています
Loader.load('data/map.json')
アイデアは、任意のjsonファイルを渡すことができ、ローダーがそれを処理することです
ここに async false 形式のローダーがあります
var Loader = {
basePath: '',
cache: {},
load: function(name) {
if(typeof this.cache[name] == 'undefined') {
var loadUrl = (this.basePath == '') ? name : this.basePath + '/' + name;
var parameters = {
url: loadUrl,
dataType: 'json',
async: false,
context: this,
success: function(data) {
this.cache[name] = data;
}
};
$.ajax(parameters);
}
return this.cache[name];
}
};
return Loader;
しかし、これは async false 形式であり、jQuerymobile でより適切に動作させるには、これを async true 形式にする必要があるため、ここでいくつかの助けを借りて、非同期のポイントに到達することができました
var data = AsyncLoader.load('data/map.json').done(function(data, textStatus, jqXHR) {
console.log("complete");
}).fail(function(jqXHR, textStatus, errorThrown) {
console.log("an error has occurred");
}).always(function(jqXHR, textStatus) {
console.log("running");
});
これは asynloader を呼び出します
function($) {
var AsyncLoader = {
basePath: '',
cache: {},
load: function(name) {
if(typeof this.cache[name] == 'undefined') {
var loadUrl = (this.basePath == '') ? name : this.basePath + '/' + name;
var parameters = {
beforeSend: function() { $.mobile.showPageLoadingMsg(); },
complete: function() {$.mobile.hidePageLoadingMsg(); },
url: loadUrl,
dataType: 'json',
async: true,
context: this,
success: function(data) {
this.cache[name] = data;
}
};
$.ajax(parameters);
}
return this.cache[name];
}
};
return AsyncLoader;
問題は、これを機能させるために、this.cache[name]; を返すのではなく、$.ajax(parameters) を返す必要があることです。そうしないと、javascript エラーが発生します。問題は、maps.json を 2 回目にロードするときに $.ajax(parameters) を取得するように変更すると、this.cache からデータが取得されず、役に立たないjsonファイル
誰か助けてくれませんか
ありがとう :)