守护
守护
  • 发布:2019-05-26 03:28
  • 更新:2022-06-26 15:43
  • 阅读:1183

Android设备下预加载页面ajax请求10分钟后不能再次执行

分类:5+ SDK

某些Android设备,如华为荣耀畅玩7,预加载页面ajax请求10分钟后不能再次执行。
重现方法:

index页面里:

<!DOCTYPE html>  
<html>  
<head>  
<meta charset="utf-8">  
<title>Hello MUI</title>  
<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">  
<meta name="apple-mobile-web-app-capable" content="yes">  
<meta name="apple-mobile-web-app-status-bar-style" content="black">  
<link rel="stylesheet" href="css/mui.min.css">  
<link rel="stylesheet" type="text/css" href="css/app.css"/>  
<script src="js/mui.min.js"></script>  
<script>  
mui.init();  
mui.plusReady(function () {  
    //在APP首页预加载多个待用的页面  
    var testPage=mui.preload({url:'jpage.html',id:'jpage.html'});  
    mui(document).on('tap','#test',function(){  
        console.log('准备打开预加载页面...');  
        mui.fire(testPage,'refreshPage',{data:'你好!'});  
    });  

    // testPage.addEventListener('loaded',function () {    
    //  console.log('000');  
    // });  

    // testPage.addEventListener('show',function(){  
    //  console.log('show');  
    // });  
    //   
    // testPage.addEventListener('rendered',function(){  
    //  console.log('rendered');  
    // });  
});  
</script>  
</head>  
<body>  
<header class="mui-bar mui-bar-nav">  
    <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>  
    <h1 class="mui-title">测试mui.preload预加载</h1>  
</header>  
<div class="mui-content">  
    <button id="test" type="button" style="margin-top: 100px;" class="mui-btn mui-btn-blue mui-btn-block">打开预加载页面</button>  
</div>  
</body>  
</html>  

jpage页面:

<!doctype html>  
<html>  
<head>  
<meta charset="utf-8">  
<title></title>  
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />  
<link href="css/mui.min.css" rel="stylesheet" />  
<script src="js/mui.js"></script>  
<style type="text/css">  
    *{touch-action: none;}  
    body{text-align: center;}   
    .div{margin:150px auto; width:400px; height:100px;}   
</style>  
<script type="text/javascript">  
    mui.init();  
    mui.plusReady(function () {  
        window.addEventListener('refreshPage',function (event) {  
            mui('#t1')[0].style.display='';  
            mui('#t2')[0].style.display='none';  
            mui('#t2')[0].innerText='';  
            //这里发起ajax请求获取数据后显示b页面    
            var url='http://api.map.baidu.com/location/ip';  
            var params={ak:'ia6HfFL660Bvh43exmH9LrI6'};  
            console.log(JSON.stringify(params));//这里每次都能打印请求参数  
            mui.ajax(url,{data:params,type:'post',timeout:2000,  
                success:function(data){  
                    console.log('ajax请求成功,显示请求数据的页面..');  
                    mui('#t1')[0].style.display='none';  
                    mui('#t2')[0].style.display='';  
                    mui('#t2')[0].innerText=data.content.address;  
                    plus.webview.currentWebview().show();  
                },error:function(xhr,type,errorThrown){console.log('ajax error');}  
            });  
        });  
    });  
</script>  
</head>  
<body>  
<header class="mui-bar mui-bar-nav">  
    <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>  
    <h1 class="mui-title">标题</h1>  
</header>  
<div class="mui-content">  
    <div id="t1">hello world!</div>  
    <div id="t2" class="div">111</div>  
</div>  
</body>  
</html>  

上面mui.ajax方法,页面10分钟中之后就不再执行,也就是说,10分钟之后不再打印console.log('ajax请求成功,显示请求数据的页面..');

以上测试部分Android设备上100%能重现此问题。

ps:
1、特别注意的是在index.html页面点击按钮通过mui.fire打开jpage.html后,点击返回到index.html页面再等10分钟才能重现问题。
2、在10分钟后,点击按钮,index.html页面感觉刷新了一下(动了一下);

IOS设备没有发现此问题。

怀疑是ajax缓存问题,尝试在ajax中添加cache:false,headers:{'If-Modified-Since':'0','Cache-Control':'no-cache'},均不能解决问题。

搜索问答中相关提问:mui.ajax() 有的时候不执行


从上面截图中可以看出时间相差10分钟后没有再打印:ajax请求成功,显示请求数据的页面.. 这句了。我点击了两次按钮只打印了ajax执行前的参数信息,并没有执行ajax。

请问dcloud技术,这个怎么解决?急啊,在线等回复。

2019-05-26 03:28 负责人:无 分享
已邀请:
守护

守护 (作者)

顶顶

守护

守护 (作者)

拜托dcloud技术了,给个指导建议吧。着急啊,好多客户反映相关功能 点击无反应啊。

Android_TRY

Android_TRY

你好,附件发下apk吧。

  • 守护 (作者)

    修改了一下,附件是源码和打包的apk的压缩包。请帮忙看看。谢谢了!!!

    2019-05-28 01:05

  • 守护 (作者)

    有什么临时补救方法,先让着一批有问题的Android机子,先能正常使用,而不用每次关闭APP,然后重启才能解决。(此方法,隔一会又会出现问题)

    2019-05-28 12:41

守护

守护 (作者)

附件已提交!谢谢!

守护

守护 (作者)

mark

守护

守护 (作者)

调试了一下:mui.js的源码,找到$.ajax看看到底怎么执行的,发现第一次启动APP后,ajax正常被调用,并且完成和服务器的交互。
过10分钟左右再次查看ajax的执行,发现readyState=1,每次都和服务器连接已建立,不会在改变状态了。
具体执行过程见下图:

  • DCloud_UNI_CHB

    不存在跨域问题,你可以直接在代码中使用window.XMLHttpRequest发起ajax请求,测试锁屏10分钟后的情况

    2019-05-29 17:15

守护

守护 (作者)

再顶

b***@qrzc.tech

b***@qrzc.tech

兄弟问题解决了吗?

y***@126.com

y***@126.com

我也遇到了,这个问题,求指教

要回复问题请先登录注册