pjax疑难杂症bug
2020-03-27 本文已影响0人
车文烨
1、莫名其妙的js时间失效或者动画变形
比如pjax加载当前页面时由于此前的js都加载过了,而pjax是通过ajax加载过来的,导致一些元素没绑定时间;
在使用腾讯api定位时获取经纬度存cookie后重新加载当前页面时,忌用pjax,可以使用window.location.href加载;
2、js事件重复绑定
比如进入另一个页面再回退时出现点击时间重复绑定,触发多次等各种奇葩行为;
解决:用jq的off()函数先解除绑定再on()绑定click,(document).off('click','.box');
$(document).on('click','.box',function(e){})
3、js事件冲突
因为pjax是异步加载页面过来渲染,不是真正的打开新页面,导致每个页面引入的js都被浏览器加载进来了,各个js之间可能导致冲突;
此时可以使用闭包原理解决,立即即使函数;(function($){});
这个函数前一般可以加英文分号,因为避免前面有变量连接这里的(),变量变成函数而导致错误;
也可以采用内联的方法避免冲突;
4、css样式冲突
跟第三点差不多,页面引入的css文件会随着页面不断加载进来,叠加在一起就造成冲突;
解决:规范起名字,比如每个页面的父容器class都是唯一的;或者采用内联;
5、微信api错误
原因是pjax加载的连接带有pjax的参数,和当前页面连接不一样二导致signature不同引发错误;
比如微信扫一扫,用window.location.href获取当前页面连接,然后传中国过去即可;