1.报错的函数:
$.ajax({
type: "POST",
data:{"requestParams":JSON.stringify(requestParams)},
url: getBasePath()+"/rest/userInfo/saveGjzLoginLogList",
dataType : "json",
cache: false,
error: function(json)
{
alert("亲,网络似乎开小差了");
},
success: function(data){
}
});
2.遇到此问题首先想到的是ios物理返回事件不刷新的问题,下面是解决返回事件的方法及总结
1.物理返回事件,强制页面刷新(结果:::苹果手机会进入返回的死循环,a-b-c,点返回后是c-b-c-b-c-b)
var ua = navigator.userAgent;
if (ua.indexOf('iPhone') > -1) {//苹果手机
window.onload = function () {
setTimeout(() => {
window.addEventListener("popstate", function (e) {
// alert("我监听到了浏览器的返回按钮事件啦");
self.location = document.referrer;
});
}, 500)
}
}
2.单个页面添加物理返回事件(可行,但是要单个页面设置,跳转到指定页面)
<script>
$(document).ready(function(){
pushHistory();
window.addEventListener("popstate", function(e) { //回调函数中实现需要的功能
alert("我监听到了浏览器的返回按钮事件啦");
window.location.href="../../ownerYJQ/index.html";
}, false);
})
//监听返回事件
function pushHistory() {
var state = {
returnUrl:"index.html",
title: "选择小区",
url: "__SELF__"
};
window.history.pushState(state, state.title, state.url);
}
</script>
3.var wxback = {
init :function(){
//隐藏微信分享按钮等
document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {
WeixinJSBridge.call('hideToolbar');
WeixinJSBridge.call('hideOptionMenu');
WeixinJSBridge.call('hideMenuItems');
});
if(getSystem()=="ios"){
//this.pushHistory();
/* window.addEventListener("popstate", function(e) { //回调函数中实现需要的功能
//window.location.href = document.referrer+"&"+Math.floor(Math.random()*1000);
//history.go(-1);//不管怎么样都是返回到最初的页面返回了n次
//history.back();//不管怎么样都是返回到最初的页面返回了n次
//window.location = document.referrer;//上一个页面url
//WeixinJSBridge.call('closeWindow');//直接关闭页面
}, false);*/
var isPageHide = false;
window.addEventListener('pageshow', function () {
if (isPageHide) {
window.location.reload();
}
});
window.addEventListener('pagehide', function () {
isPageHide = true;
});
}
},
pushHistory :function () {
var state = {
title: document.title,
url: location.href
}
window.history.pushState(state, state.title, state.url);
console.log(window.history);
},
}
4. pageshow安卓没响应,pagehide苹果没响应。页面会先进入缓存页面,在进入重加载页面,加载缓存页面的时候,页面报错。
$(function () {
var isPageHide = false;
window.addEventListener('pageshow', function () {
if (isPageHide) {
alert("进来了");
window.location.reload();
}
});
window.addEventListener('pagehide', function () {
alert("走了");
isPageHide = true;
});
})
5. function pushHistory() {
var state = {
title: document.title,
url: location.href
}
window.history.pushState(state, state.title, state.url);
// console.log(window.history);
}
6.监听是否是缓存过来的页面以下是几种使用方式:
1。直接在HTMl中使用,注意只能在body上进行事件注册
<body οnpageshοw="myFunction(event)">
<p>该实例演示了如何向 body 元素添加 "onpageshow" 事件。</p>
<h1 id="demo"></h1>
<script>
function myFunction() {
alert("页面是否从浏览器缓存中加载? " + event.persisted);
}
</script>
2.JS中通过元素获取绑定在body上
document.getElementsByTagName("BODY")[0].onpageshow = function() {myFunction()};
3.在window上注册这个方法
window.addEventListener("pageshow", myFunction);
function myFunction(event) {
alert("页面是否从浏览器缓存中加载? " + event.persisted);
}.
7. (结果:::进入死循环)
1.js中获取上一页面的路径var prevUrl = document.referrer;
2.h5的特性sessionStorage来保存路径sessionStorage.setItem("prevUrl",prevUrl );(不熟悉的可以百度一下sessionStorage和localStorage的区别和用法)
3.获取上一页面的路径var prevUrl = sessionStorage.getItem("prevUrl");
10.窗体中有XMLHttpRequest对象却没有初始化,接下来开始研究怎么初始化XMLHttpRequest对象。
var xmlHttpRequest;
$(function(){
if(window.XMLHttpRequest){
xmlHttpRequest=new XMLHttpRequest();
}else{
xmlHttpRequest=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlHttpRequest.open("GET","AjaxServlet",true);
});
3.最终是通过改ajax解决。确实是只有缓存页面才会报错,但是是因为ajax没有设置好
$.ajax({
type: "POST",
data:{"requestParams":JSON.stringify(requestParams)},//简化传参
url: getBasePath()+"/rest/userInfo/saveGjzLoginLogList",
dataType :"json",
cache: false,//增加设置同步
async:false,//增加延时
timeout:50000,
error: function(json)
{
alert("亲,网络似乎开小差了-数据埋点");
},
success: function(data){
}
});
增加了async:false;timeout:50000.对传参进行简化