使用百度APP打开页面无法显示alert()提示信息的问题
小编在开发时某个页面使用ajax提交,返回信息后通过alert()系统提示窗提示“提交成功”,但该页面在微信、手机浏览器、pc浏览器都正常,在百度APP内莫名其妙的提交后无提示。
查看后台发现数据也正常提交写入了,只是没有成功提示,遇到此问题当然第一反应是难道我们的代码写的不标准,导致百度APP没有成功执行。
我们在使用ajax提交时会涉及到两个后续处理方法success()和error(),分别处理提交成功和提交失败。提交成功信息就存于success()中,代码工坊本次处理的页面也不例外,为了更好的阐述问题,我们将业务代码精简为如下,在百度APP内依然不提示。
function subForm1(id){
var tel = $("#form"+id).find("input[name='tel']").val();
var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+d{8})$/;
if(!myreg.test(tel)){
layer.msg('请输入有效的手机号码!');
return;
}
var form = $("#form"+id).serialize();
ajaxLoad();
$.ajax({
url :"/subForm.php",
async : false,
cache : false,
type : 'POST',
timeout:'3000',
dataType: "json",
data:{"data":form,'cateList':cateList,"customList":custom_list},
success:function(data){
// console.log(res);
ajaxCancelLoad();
//var obj = $.parseJSON(res);
alert('提交成功');
},
error:function(){
ajaxCancelLoad();
alert('网络错误');
},
complete: function (XMLHttpRequest, status) { //求完成后最终执行参数
ajaxCancelLoad();
// 设置timeout的时间,通过检测complete时status的值判断请求是否超时,如果超时执行响应的操作
if (status == 'timeout') { //超时,status还有success,error等值的情况
ajaxTimeoutTest.abort();
layer.msg("请求超时");
}
}
});
return;
}
这就有些蒙了,这难道不是正确的写法吗,可是百度APP仍然诡异的不执行alert(),经过苦思冥想无果后,我们写了一个alert()放入页面顶部,代码如下:
$(document).ready(function(e) {
alert("测试通知");
});
在百度APP内依然没有提示,小编突然恍然大悟,莫非是百度屏蔽了alert()?
接着我们将alert()改为了一个页面弹层插件layer,代码如下:
function subForm1(id){
var tel = $("#form"+id).find("input[name='tel']").val();
var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+d{8})$/;
if(!myreg.test(tel)){
layer.msg('请输入有效的手机号码!');
return;
}
var form = $("#form"+id).serialize();
ajaxLoad();
$.ajax({
url :"/subForm.php",
async : false,
cache : false,
type : 'POST',
timeout:'3000',
dataType: "json",
data:{"data":form,'cateList':cateList,"customList":custom_list},
success:function(data){
// console.log(res);
ajaxCancelLoad();
//var obj = $.parseJSON(res);
layer.msg('提交成功');
},
error:function(){
ajaxCancelLoad();
layer.msg('网络错误');
},
complete: function (XMLHttpRequest, status) { //求完成后最终执行参数
ajaxCancelLoad();
// 设置timeout的时间,通过检测complete时status的值判断请求是否超时,如果超时执行响应的操作
if (status == 'timeout') { //超时,status还有success,error等值的情况
ajaxTimeoutTest.abort();
layer.msg("请求超时");
}
}
});
果然可以了,至于百度APP不进行alert()是有意为之还是系统bug就不得为之了,毕竟有些页面对alert()的滥用会让普通用户很苦恼,导致app卡顿或无法关闭,但粗暴的直接屏蔽不显示对用户影响体验巨大,如果能够在app内限定周期提醒次数,是不是会更加人性化呢?