【发布时间】: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));
}
}
- 我找到了文章Caching a jquery ajax response in javascript/browser。
-
http://betterexplained.com/articles/how-to-optimize-your-site-with-http-caching/
它说 cache:true 只适用于 GET 和 HEAD 请求。
- 我需要知道缓存:true 是在 javscript 中实现的。
我试过了
params = "action=" + action
+ "&domain=" + encodeURIComponent(domain)
+ "&preventCache="+new Date();
【问题讨论】:
标签: javascript ajax caching