涉及设备:iOS8.3 iPhone ipad
使用场景:免费wifi验证页面
浏览器:连接免费wifi认证时自动弹出的mobile safari浏览器
异常说明:使用jquery ajax同步方法向后台传递数据验证,PC端和安卓设备点击按钮均正常,上述设备点击按钮无响应,经排查发现iOS8.3设备没有将前台数据传递至后台,导致用户点击按钮无响应
原始代码:
$.ajax({
type:"POST",
dataType:"html",
// timeout : 1000, //超时时间设置,单位毫秒
url:"login.php?t="+new Date().getTime(),
async:false,
data:{actionmethod:"checkmac",mac:MAC},
success:function(data){
}
})
此部分代码使用同步(async:false)来传递数据,url后增加时间戳是为了防止浏览器缓存,并依据返回的信息做相关认证处理,但是ios8.3用户无法触发button按钮的ajax事件
修改代码:
$.ajax({
type:"POST",
dataType:"html",
// timeout : 1000, //超时时间设置,单位毫秒
url:"login.php?t="+new Date().getTime(),
//async:false,
data:{actionmethod:"checkmac",mac:MAC},
success:function(data){
}
})
取消同步操作,默认执行异步(点击按钮后将button状态设为disabled,有数据返回后恢复),这样iPhone和iPad用户设备正常使用
结论:mobile Safari可能基于某种机制禁止页面存在同步操作的ajax请求,只能以异步形式实现,个人在测试过程中也未找到具体原因,有知道的可以分享一下。