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 store5.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; }

