需求是在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
为用户触发事件内部或者加载时,不会被拦截,一旦将弹出代码移动到一段异步代码内部,就会被拦截。
window.open
因此我们通过 ajax
必须设置成同步模式即可解决(默认是异步的)。
ajax
$.ajax({
url: url,
type: "post",
dataType: "json",
async:false,
data: $("#Form").serialize(),
success: function(url) {
window.open(url,'_blank');
$("#btn_cancel").trigger("click");
}
});