ajax请求里面调用window.open会被浏览器拦截
2017-03-09 15:12
323 查看
场景:
业务系统需要跳转到其他系统-支付平台去完成支付,使用的 window.open(url),跳转之前需要做一系列的ajax验证,
那么问题来了,window.open放在ajax校验完成并且成功后才会调用,这时浏览器会觉得这个弹窗不是用户操作想看到的,
所以自动进行了拦截!
上述问题在我解决问题时,也分为了两种场景:
一、ajax 返回成功后立即调用window.open()方法,代码如下:
对应的解决方案(在ajax执行前先打开窗口):
二、 ajax执行后,还需要对ajax返回结果进行业务判断,根据不同的业务还需要弹出确认框进确认,然后根据相应的操作再决定是否跳转,
那么这里如果还是跟场景一一样的ajax调用执行前就打开窗口的话,很显然交互上面就不合适了,代码如下:
对应的解决方案如下:
综上,根据不同的业务需求,对应不同的解决方法,不过如果不是必须一定要用异步的话,场景二的解决办法改动最小,最实用!!!
上述两种方法测试通过 chrome Firefox ie
业务系统需要跳转到其他系统-支付平台去完成支付,使用的 window.open(url),跳转之前需要做一系列的ajax验证,
那么问题来了,window.open放在ajax校验完成并且成功后才会调用,这时浏览器会觉得这个弹窗不是用户操作想看到的,
所以自动进行了拦截!
上述问题在我解决问题时,也分为了两种场景:
一、ajax 返回成功后立即调用window.open()方法,代码如下:
//去支付 function gotoPay(param) { $.ajax({ type: "post", url: "/xxxx/xxxx", data: {"param": param}, error: function (data) { showError(data); }, success: function (data) { if (data.errorFlag == 0) { window.open("www.baidu.com"); } else { layer.alert(data.desc, {icon: 2, title: '提示信息'}) } } }); }
对应的解决方案(在ajax执行前先打开窗口):
//去支付 function gotoPay(param) { // 新加 var newTab=window.open('about:blank'); $.ajax({ type: "post", url: "/xxxx/xxxx", data: {"param": param}, error: function (data) { showError(data); }, success: function (data) { if (data.errorFlag == 0) { // 新加 newTab.location.href = "www.baidu.com"; } else { layer.alert(data.desc, {icon: 2, title: '提示信息'}) } } }); }
二、 ajax执行后,还需要对ajax返回结果进行业务判断,根据不同的业务还需要弹出确认框进确认,然后根据相应的操作再决定是否跳转,
那么这里如果还是跟场景一一样的ajax调用执行前就打开窗口的话,很显然交互上面就不合适了,代码如下:
//去支付 function gotoPay(param) { $.ajax({ type: "post", url: "/xxxx/xxxx", data: {"param": param}, error: function (data) { showError(data); }, success: function (data) { if (data.errorFlag == 0) { if (data.status == 1) { // 和场景一的区别就是这里需要根据业务状态弹框确认 layer.open({ //type: 1, icon: 3, area: ['500px', 'auto'], title: "支付", btn: ['确认支付', '取消'], content: "订单当前状态为xxxxxx,确认继续支付吗?", btn1: function (index) { layer.closeAll(); window.open("www.baidu.com"); }, btn2: function (index) { layer.closeAll(); } }); } else { window.open("www.baidu.com"); } } else { layer.alert(data.desc, {icon: 2, title: '提示信息'}) } } }); }
对应的解决方案如下:
//去支付 function gotoPay(param) { $.ajax({ type: "post", url: "/xxxx/xxxx", async: false,// 只加了个同步 data: {"param": param}, error: function (data) { showError(data); }, success: function (data) { if (data.errorFlag == 0) { if (data.status == 1) { // 和场景一的区别就是这里需要根据业务状态弹框确认 layer.open({ //type: 1, icon: 3, area: ['500px', 'auto'], title: "支付", btn: ['确认支付', '取消'], content: "订单当前状态为xxxxxx,确认继续支付吗?", btn1: function (index) { layer.closeAll(); window.open("www.baidu.com"); }, btn2: function (index) { layer.closeAll(); } }); } else { window.open("www.baidu.com"); } } else { layer.alert(data.desc, {icon: 2, title: '提示信息'}) } } }); }
综上,根据不同的业务需求,对应不同的解决方法,不过如果不是必须一定要用异步的话,场景二的解决办法改动最小,最实用!!!
上述两种方法测试通过 chrome Firefox ie
相关文章推荐
- ajax请求响应中用window.open打开新窗口会被浏览器拦截的解决方式
- ajax异步请求中使用window.open会被浏览器拦截解决方案
- ajax请求响应中window.open拦截解决
- ajax请求成功后新开窗口window.open()被拦截解决方法
- ajax请求成功后新开窗口window.open()被拦截解决方法
- 异步请求后根据结果window.open方式打开新页面,浏览器拦截弹窗问题
- 在Ajax回调方法中通过window.open方法下载文件被浏览器拦截的解决方法
- Ajax请求成功后新开窗口window.open()被拦截解决方法
- Ajax请求响应中用window.open打开新窗口被拦截的解决方法
- ajax请求成功后新开窗口window.open()被拦截解决方法
- ajax后 使用window.open() 浏览器出现拦截的解决办法
- ajax回调时浏览器拦截window.open()
- 解决window.open浏览器拦截的办法
- ajax请求之后 用新窗口打开 防止浏览器阻止和拦截
- window.open关于浏览器拦截问题分析及解决方法
- window.open被浏览器拦截的解决方案
- 解决回车弹出新页面及弹新页面时被浏览器拦截window.open方法
- window.open浏览器弹出新窗口被拦截—原因分析和解决方案
- window.open()方法打开新的一页不被浏览器拦截
- jQuery+ajax中,让window.open不被拦截(转)