繁体   English   中英

jQuery缓存JSON响应

[英]jQuery caching JSON response

我正在使用基本函数来执行AJAX请求并获取JSON:

function getData(endpoint) {
    return $.ajax({
        type: "GET",
        url: endpoint
    });
}

问题是有时终端可能没有响应或者花费太多时间来加载数据。 在这种情况下,我需要使用从上一次调用端点获得的最新JSON。

我正在寻找一种方法来跟踪AJAX响应时间,如果它超过给定的时间限制,则使用上一个请求的缓存JSON响应。

使用jQuery有一种优雅的方式吗?

谢谢你的任何建议

尝试用一些示例代码解释Anthony Gris的评论

var lastResponseData;

function getData(endpoint) {
   return $.ajax({
    type: "GET",
    url: endpoint,
    dataType: 'json',
    timeout: 1000,
    error:function(jqxhr, status){
    if(status==="error"){
      if(lastResponseData!=null){
       //use it
      }
    }
    else
    {
    getData(endpoint); try again
    },
    success:function(data){
     lastResponseData=data;
     //do work
    }

    }
 });
}

变量和延迟对象+超时会使这很容易:

var prevReq = $.Deferred().resolve().promise();

function getData(endpoint) {
    var newReq = $.ajax({
        type: "GET",
        url: endpoint,
        timeout: 2000
    }).then(function(data){
        // successful, set previous request to this request
        prevReq = newReq;
        return data;
    },function(){
        // it failed, return the previous successful request
        return prevReq;
    });
    return newReq;
}

getData("1").done(function(data){
    console.log(data);
})

http://jsfiddle.net/Tentonaxe/85HNs/2/

您应该具有处理AJAX不同结果的函数,但是在成功的情况下,您应该在全局对象中存储响应,并始终从那里获取数据,例如:

GlobalObj = {};
GlobalObj.response = {};

function getData(endpoint) {
    var data;
    $.ajax({
        type: "GET",
        url: endpoint
   })
   .done(function(){ 
   //store in global object
   })
   .fail(function(){})
   .always( function(){
        data = GlobalObj.response;
        //these methods are asyncronous 
        //here you should assing the value instead of returning
   });
}

您可以将最后一个响应保存在浏览器cookie中。

看看jQuery cookie

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM