【问题标题】:How to Store the xhr request in cache using pure javascript如何使用纯javascript将xhr请求存储在缓存中
【发布时间】:2015-08-15 02:12:52
【问题描述】:

我需要什么

  • 我需要像当用户点击 url 时说 local/abc ,然后在这种情况下 xhr 调用有效。

  • 然后再次打开本地/abc2 页面 xhr 调用。

  • 这将增强服务器上额外的 xhr 调用。

  • 我需要像当用户点击第一页然后只有 xhr 调用可以保存在缓存中。

  • 如果用户再次点击另一个 url,则不应从缓存本身调用 xhr 调用。

javascript 代码

       if(/Googlebot/i.test(navigator.userAgent)){}else{
        !function(e,t){var n=function(){return n.get.apply(n,arguments)},r=n.utils={isArray:Array.isArray||function(e){return Object.prototype.toString.call(e)==="[object Array]"},isPlainObject:function(e){return!!e&&Object.prototype.toString.call(e)==="[object Object]"},toArray:function(e){return Array.prototype.slice.call(e)},getKeys:Object.keys||function(e){var t=[],n="";for(n in e)e.hasOwnProperty(n)&&t.push(n);return t},escape:function(e){return String(e).replace(/[,;"\\=\s%]/g,function(e){return encodeURIComponent(e)})},retrieve:function(e,t){return e==null?t:e}};n.defaults={},n.expiresMultiplier=86400,n.set=function(n,i,s){if(r.isPlainObject(n))for(var o in n)n.hasOwnProperty(o)&&this.set(o,n[o],i);else{s=r.isPlainObject(s)?s:{expires:s};var u=s.expires!==t?s.expires:this.defaults.expires||"",a=typeof u;a==="string"&&u!==""?u=new Date(u):a==="number"&&(u=new Date(+(new Date)+1e3*this.expiresMultiplier*u)),u!==""&&"toGMTString"in u&&(u=";expires="+u.toGMTString());var f=s.path||this.defaults.path;f=f?";path="+f:"";var l=s.domain||this.defaults.domain;l=l?";domain="+l:"";var c=s.secure||this.defaults.secure?";secure":"";e.cookie=r.escape(n)+"="+r.escape(i)+u+f+l+c}return this},n.remove=function(e){e=r.isArray(e)?e:r.toArray(arguments);for(var t=0,n=e.length;t<n;t++)this.set(e[t],"",-1);return this},n.empty=function(){return this.remove(r.getKeys(this.all()))},n.get=function(e,n){n=n||t;var i=this.all();if(r.isArray(e)){var s={};for(var o=0,u=e.length;o<u;o++){var a=e[o];s[a]=r.retrieve(i[a],n)}return s}return r.retrieve(i[e],n)},n.all=function(){if(e.cookie==="")return{};var t=e.cookie.split("; "),n={};for(var r=0,i=t.length;r<i;r++){var s=t[r].split("=");n[decodeURIComponent(s[0])]=decodeURIComponent(s[1])}return n},n.enabled=function(){if(navigator.cookieEnabled)return!0;var e=n.set("_","_").get("_")==="_";return n.remove("_"),e},typeof define=="function"&&define.amd?define(function(){return n}):typeof exports!="undefined"?exports.cookie=n:window.cookie=n}(document);

         var cookie_val = parseInt(cookie.get("notification_after_clicked_detailmobile"), 10);
         var cookie_vals= parseInt(cookie.get("notification_before_clicked_detailmobile"), 10);

            if(cookie_val!=1)
            {
                var mobile="/app.php/notificationdetail";
                var cache = {};
                var http=new XMLHttpRequest
                url=mobile,params=url;http.open("POST",url,!0),

                http.setRequestHeader("Content-type","application/json; charset=UTF-8"),
                http.onreadystatechange=function()
                {
                    if(4==http.readyState&&200==http.status)
                    {

                    cache[url] = http.responseText;
                    var obj=http.responseText;
                    var parsed=JSON.parse(obj);
                    var notification_count=1;
                    $(".notification1").append(notification_count);
                    setTimeout(function(){
                    document.getElementById('myimage').style.display='block';
                    document.getElementById('myimage').style.float='left';},10);
                    for(var x=0;x<parsed.length;x++)
                    {
                        var objs=parsed[x];
                        var eventname=objs.abbr_name;
                        var date=objs.startDate;
                        var event_url=objs.event_url;
                        var city=objs.city;
                        var country=objs.country;
                        var time=objs.endDate;
                        var monthNames=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
                        var dateObj=new Date(date);
                        var months=dateObj.getUTCMonth()+1;var month=monthNames[dateObj.getMonth()];
                        var day=dateObj.getUTCDate();
                    if(x==0)
                    {
                        var htmlcontent='<a href="/'+event_url+'" > <div class="row row_color"><div class="col-xs-12"><p class="grey_heading_notification"><strong>Similar Events from your industry in '+country+'</strong></p></div><div class="col-xs-2"><div class="circle_image">'+month+' <br><span class="notification_black">'+day+'</span></div></div><div class="col-xs-10"><p>'+eventname+'</p><div class="col-xs-9"><div class="row"><p class="small"><span class="notification_light_grey"><i class="fa fa-map-marker orange12"></i> '+city+', '+country+'</span></p></div></div><div class="col-xs-3"><div class="row"><span class=" btn_orange_small pull-right">Attend</span></div></div></div></div></a>';

                    }
                    else if(x %2==0)
                    {
                        var htmlcontent='<a href="/'+event_url+'" > <div class="row row_color"><div class="col-xs-2"><div class="circle_image">'+month+' <br><span class="notification_black">'+day+'</span></div></div><div class="col-xs-10"><p>'+eventname+'</p><div class="col-xs-9"><div class="row"><p class="small"><span class="notification_light_grey"><i class="fa fa-map-marker orange12"></i> '+city+', '+country+'</span></p></div></div><div class="col-xs-3"><div class="row"><span class=" btn_orange_small pull-right">Attend</span></div></div></div></div></a>';

                    }
                    else
                    {
                    var htmlcontent='<a href="/'+event_url+'" ><div class="row row_color1"><div class="col-xs-2"><div class="circle_image">'+month+'<br><span class="notification_black">'+day+'</span></div></div><div class="col-xs-10"><p>'+eventname+'</p><div class="col-xs-9"><div class="row"><p class="small"><span class="notification_light_grey"><i class="fa fa-map-marker orange12"></i> '+city+', '+country+'</span></p></div></div><div class="col-xs-3"><div class="row"> <span class=" btn_orange_small pull-right">Attend</span> </div></div></div></div></a>';
                    }
                $('#notify_bar').append(htmlcontent);}}},http.send(JSON.stringify(params));
            }
        }

它说 cache:true 只适用于 GET 和 HEAD 请求。

  • 我需要知道缓存:true 是在 javscript 中实现的。

我试过了

      params = "action=" + action 
     + "&domain=" + encodeURIComponent(domain) 
     + "&preventCache="+new Date();

【问题讨论】:

    标签: javascript ajax caching


    【解决方案1】:

    您可以创建一个对象来记忆 ajax 响应:您需要序列化您的字符串请求并将其用作您将用于缓存请求的对象的键,如果该键存在,那么您将从如果没有缓存,那么您将执行 ajax 请求。

    NON-JS 解决方案:您可以为此使用 Etags,检查您的 Web 服务器文档。

    猜你喜欢
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2021-10-13
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多