最新公告
  • 欢迎访问代码工坊,购买产品可享受在线工单服务!
  • 使用百度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内限定周期提醒次数,是不是会更加人性化呢?

    使用百度APP打开页面无法显示alert()提示信息的问题

    发表评论