需求是在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");
}
});