Создаю функцию ajax для извлечения данных с сервера и сохранения их для автономного использования, используя библиотеку javascript Dexie js
для сохранения данных в indexedDB
.
Все работает нормально, но проблема, с которой я столкнулся, состоит в том, что ajax по-прежнему отправляет запрос на выборку новых данных, даже если они уже существуют в хранилище indexedDB.
Когда я использую только localCache, он работает нормально, до добавления return false
, если кэш существует, но теперь возвращение false внутри Dexie collection loop
не работает, и я попробовал все, что мог. Пожалуйста, кто-нибудь может мне помочь?
Я хочу, чтобы функция возвращала обещание от вызова ajax
function ajax_fetch(fetch_url){
var cacheId = localCache.getkey(fetch_url, "user");
return $.ajax({
url: fetch_url,
data: {'fetch_api' : true, "from": "vue", "search": null},
type: "GET",
beforeSend: function(){
if(window.indexedDB && window.useIndexedDB == true){
if(!sdb.isOpen()) {sdb.open(); }
var collection = sdb.searchIndex.where("nameId").equals(cacheId);
return collection.count(function(count){
return ((count > 0) ? collection.each(function(obj) {
console.log ("Download from indexedDB");
}) : false);
});
}else{
if(localCache.exist(cacheId)) {
localCache.get(cacheId);
return false;
}
}
return true;
},
complete: function (jqXHR, textStatus) {
console.log ("Download just once per day ");
if(jqXHR.status == 200 && (textStatus == "OK" || textStatus == "success")){
var time = new Date().getTime();
if(window.indexedDB && window.useIndexedDB == true){
sdb.searchIndex.put({nameId: cacheId, json: jqXHR.responseJSON, timestamp: time}).catch(function(error) {
console.log ("Ooops: " + error);
});
}else{
localCache.set(cacheId, fetch_url, jqXHR.responseJSON, localCache.cacheComplete);
}
}
},
error:function (jqXHR, exception){
ajaxError(jqXHR, exception, true);
}
});
}
Я использую вышеуказанную функцию таким образом
ajax_fetch("/path/file.php").then(json => {
console.log(json);
});