1.Ajax请求被缓存的几种处理方式
一、通过URL添加后缀的方式
这种方式是我们大家都会使用的技巧,大多人都知道
例如:
本来请求的地址是: /home/action?
加查询参数后缀后:/home/action?ran=Match.Random();
后缀查询参数变量可以自定义,只需要每次都变化即可!
二、通过Jquery的Ajax API设置相关属性
var LoadTime = function () { $.ajaxSetup({ cache: false }); $.ajax({ url: '@Url.Action("currTime")', success: function (result) { $("#currTime").html(result); } }) }
三、通过定制响应
我们都知道http请求头重包请求的相关属性,此种方式通过控制消息头中的Cache-Control包头,并将其设置为”No-Cache”,这样只是浏览器不对结果缓存.
1、在ajax发送请求前加上 xmlHttpRequest.setRequestHeader(“Cache-Control”,”no-cache”);
2、在服务端加 header(“Cache-Control: no-cache, must-revalidate”);
3、在ajax发送请求前加上 xmlHttpRequest.setRequestHeader(“If-Modified-Since”,”0″);
2.实现获取任意月份有多少天的函数
function getMonthLength(date) { let d = new Date(date) // 将日期设置为下月一号 d.setMonth(d.getMonth()+1) d.setDate('1') // 获取本月最后一天 d.setDate(d.getDate()-1) return d.getDate(); }
function getMonthLength(year, month){ return new Date(year, month, 0).getDate() }
3.怎样用只一个6升和5升的水壶装3升水
先把5升的装满倒入6升的壶,然后再5升装满倒入6升。6升的水壶清空,把5升壶里的4升水倒进去。重新打满5升的壶,倒入6升的壶,正好剩下3升水。
4.vuex在页面刷新时如何处理
由于vue自身特性的原因,vuex中的数据在页面刷新之后其中的数据会初始化,这就导致组件之间通过vuex传递的数据在用户f5刷新页面之后会丢失
这里结合h5的localStorage实现页面刷新之后数据不丢失的方法
const store = new Vuex.Store({ // 定义状态 state: { lang: localStorage.getItem("changeLang") || 'zh', //先去localStorage中获取数据 myInfo: JSON.parse(localStorage.getItem("myInfo")) || {}, //这里使用JSON.parse是因为我localStorage中保存的是一个对象字符串 }, //修改状态 mutations:{ setInfo(state,info){ localStorage.setItem('myInfo', JSON.stringify(info)); //将传递的数据先保存到localStorage中 state.myInfo = info;// 之后才是修改state中的状态 }, changeLangEvent(state, type) { localStorage.setItem('changeLang', type); state.lang = type; }, }, }) export default store
5.vue中你用过哪些服务端渲染
skeleton,
6. jQuery中的extend()
Objectj Query.extend( target, object1, [objectN])
用一个或多个其他对象来扩展一个对象,返回被扩展的对象
var settings = { validate: false, limit: 5, name: "foo" }; var options = { validate: true, name: "bar" }; jQuery.extend(settings, options); 结果:settings == { validate: true, limit: 5, name: "bar" }
jQuery.fn.extend = jQuery.prototype.extend
你可以拓展一个对象到jQuery的 prototype里去,这样的话就是插件机制了。
(function( $ ){ $.fn.tooltip = function( options ) { }; //等价于 var tooltip = { function(options){ } }; $.fn.extend(tooltip) = $.prototype.extend(tooltip) = $.fn.tooltip })( jQuery );
7.js实现深克隆
// 方法一 利用迭代 // 思路是:判定要克隆的对象是不是引用类型,如果是引用类型,则继续迭代,如果该项是基本类型,则直接复制。 function deepClone(obj){ let newObj=Array.isArray(obj)?[]:{} if(obj&&typeof obj ==="object"){ for(let key in obj){ if(obj.hasOwnProperty(key)){ newObj[key]=(obj && typeof obj[key]==='object')?deepClone(obj[key]):obj[key]; } } } return newObj } let a=[{c:1},2,3,4], b=deepClone(a); a[0]={c:2}; console.log(a,b);
//方法2 利用JSON对象的方法 //主要是利用JSON.stringify和JSON.parse,这种办法只能实现纯数据的克隆,如果存在function则会直接忽略,不会进行复制操作 function deepClone2(obj){ return JSON.parse(JSON.stringify(obj)) } let a1={a: 1, b: function() {}} b1=deepClone2(a1); console.log(a1,b1);
8.js 斐波那契数列实现
递归 function fib(n){
if(n==1||n==2){return 1; }
return fbnq(n-1)+fbnq(n-2);
}
fbnq(10);
//55
function fibonacci(n){ var a = 0, b = 1, num = 0; if (n==0){ return 0; }else if(n==1){ return 1; } for(var i=1;i<n;i++){ num = a + b; a = b; b = num; } return num; }