如果localStorage中存在数据,如何返回,或以其他方式执行AJAX请求?

时间:2014-07-29 22:32:57

标签: javascript jquery ajax

抱歉措辞不好。这是代码

getJSON : function(url) {

    if ( localStorage.getItem(url) ) {

      console.log('Getting from localStorage instead');

      return $.parseJSON(localStorage.getItem(url));

    } else {
      console.log('No results locally, making XHR request...');

      return $.ajax({
        url: 'curl.php',
        type: 'GET',
        data: {
          url   : url
        }
      }).done(function (result) {
        var json = $.parseJSON(result);

        console.log('Setting to localStorage with key:', url);
        localStorage.setItem(url, result);
      })
    }
}

获取数据的两种方式:

如果它在localStorage中,则可行:

console.log(this.getJSON(url))

如果没有,它将返回AJAX对象:

this.getJSON(url).done(function (result) {
  console.log(result);
})

如何重新格式化以便我可以获取数据而无需预测它是否在localStorage中?

1 个答案:

答案 0 :(得分:3)

您可以在getJSON方法中添加一个回调参数,如下所示:

this.getJSON = function(callback)
{

if ( localStorage.getItem(url) ) {

  console.log('Getting from localStorage instead');
  // If it's in local storage execute callback immediately
  callback($.parseJSON(localStorage.getItem(url)));

} else {
  console.log('No results locally, making XHR request...');

  $.ajax({
    url: 'curl.php',
    type: 'GET',
    data: {
      url   : url
    }
  }).done(function (result) {
    var json = $.parseJSON(result);

    console.log('Setting to localStorage with key:', url);
    localStorage.setItem(url, result);
    callback(json);
  });
}

}

然后你可以打电话

getJSON(function(json) {
  // Do something with json
});