天天看点

ajax请求成功回调函数中新窗口被拦截的解决方法

需求是在ajax请求的成功回调函数中,打开一个浏览器新页面 (window.open),但无法打开,

一直以为是主流的浏览器都会拦截这种效果(这年头弹窗广告太多了,不拦截用户受不了)

初始代码如下:

$.ajax({
				url: url,
				type: "post",
				dataType: "json",				
				data: $("#Form").serialize(),
				success: function(url) {	
				 window.open(url,'_blank');
				 $("#btn_cancel").trigger("click");
										
				}
			});
           

原来当

window.open

为用户触发事件内部或者加载时,不会被拦截,一旦将弹出代码移动到一段异步代码内部,就会被拦截。

因此我们通过

ajax

必须设置成同步模式即可解决(默认是异步的)。

$.ajax({
				url: url,
				type: "post",
				dataType: "json",
                                async:false,				
				data: $("#Form").serialize(),
				success: function(url) {	
				 window.open(url,'_blank');
				 $("#btn_cancel").trigger("click");
										
				}
			});
           

问题成功解决.

bug

继续阅读