javascript - JQuery $.getJSON 异步解决方法 - 缓存 ajax 结果

标签 javascript jquery ajax caching asynchronous

我正在缓存 ajax 调用返回的 JSON,然后显示缓存中的结果。我的问题是,如果该 Ajax 调用没有缓存,则结果仅在刷新时显示。这是因为 ajax 是异步的,但我该如何解决这个问题呢? Ajax async:false 已被弃用,因此这不是一个选项。 $.getJSON .done() 函数足够还是有更好的方法?

这是迄今为止我的代码:

if ((online === true)) {
    //get JSON
    $.getJSON(baseurl + '/wp-json/app/v2/files?filter[category]' + cat + '&per_page=100', function(jd) {
        //cache JSON
        var cache = {
            date: new Date(),
            data: JSON.stringify(jd)
        };
        localStorage.setItem('cat-' + cat, JSON.stringify(cache));
    });
    //if not online and no cached file
} else if ((online === false) && (!cache['cat-' + cat])) {
    alert('There are no cached files.  You need to be online.');
}

//get cached JSON
cache['cat-' + cat] = JSON.parse(localStorage.getItem('cat-' + cat));
var objCache = cache['cat-' + cat].data;
objCache = JSON.parse(objCache); //Parse string to json
//display JSON results from cache
$.each(objCache, function(i, jd) {
    var thumb = jd.file_thumbnail.sizes.medium;
    //.....etc...
    )
}}

最佳答案

简单地重写代码会产生以下结果:

function cacheAsCacheCan(cat, callback) {
    if (online === true) {
        //get JSON
        $.getJSON(baseurl + '/wp-json/app/v2/files?filter[category]' + cat + '&per_page=100', function(jd) {
            //cache JSON
            var cache = {
                date: new Date(),
                data: JSON.stringify(jd)
            };
            localStorage.setItem('cat--' + cat, JSON.stringify(cache));
        });
        //if not online and no cached file
    } else if ((online === false) && (!cache['cat-' + cat])) {
        callback('There are no cached files.  You need to be online.');
        return;
    }
    //get cached JSON
    callback(null, cache['cat-' + cat] = JSON.parse(localStorage.getItem('cat-' + cat)));
}

cacheAsCacheCan('someCat', function(error, cachedata) {
    if(error) {
        alert(error);
    } else {
        var objCache = cachedata.data;
        objCache = JSON.parse(objCache); //Parse string to json
        //display JSON results from cache
        $.each(objCache, function(i, jd) {
                var thumb = jd.file_thumbnail.sizes.medium;
                //.....etc...
            )
        }
    }
);

关于javascript - JQuery $.getJSON 异步解决方法 - 缓存 ajax 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38654904/

相关文章:

javascript - 无法让 DataTables 与 Jade 一起使用

javascript - 将 api 中的文本添加到编辑器中

javascript - 如何通过 jQuery Ajax 在 HTML 和 PHP 之间来回传输 json 字符串?

javascript - 使用 window.onunload 调用时,AJAX 调用在 IE8 及更低版本中中止

java - 使用ajax请求发送时json值返回null

javascript - 如何在循环之后使用循环内进行的 ajax 调用的结果?

java - 设置 session cookie 的到期日期

javascript - 如何确保只有一个复选框保持选中状态?

javascript - ie 11 的对象适配替代方案

jquery - 通过按钮显示/隐藏 div