jquery ajax игнорирует сохраненные данные в indexeddb и отправляет новый вызов ajax на сервер - PullRequest
0 голосов
/ 06 января 2019

Создаю функцию 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);
});
...