2016-07-29 13 views
1

私はajax呼び出しから返されたJSONをキャッシュし、キャッシュから結果を表示します。私の問題は、そのAjax呼び出しのキャッシュがすでに存在しない場合、結果はリフレッシュ時にのみ表示されることです。これは、ajaxが非同期であるという事実には似ていますが、どうすれば回避できますか? Ajax非同期: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... 
    ) 
}} 
+3

'Ajaxは非同期ですが、どのように私はthat'回避ん - ありませんそれを取り入れ、使用する方法を学ぶ –

+0

または、ページが最初に生成されたときに、サーバー側のコードを使用して初期データを提供します。 –

答えて

1

簡単なリライトは、次が得られます。

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... 
      ) 
     } 
    } 
); 
+0

あなたのrespnseありがとう、私はあなたがコードをしようとしましたが、 "index.html:387 Uncaught TypeError:次の行であるnullのプロパティ 'データ'を読み取ることができません://取得キャッシュJSON コールバック(null、キャッシュ['cat-' + cat] = JSON.parse(localStorage.getItem(cache ['cat-' + cat]))); – LeeTee

+0

これはあなたのコードを逐語的にコピーしたためです。 '' localStorage.setItem'の 'cat - 'は間違っています... '' cat-'でなければなりません –

+0

ごめんなさい申し訳ありません。 – LeeTee

関連する問題