小编典典

在jQuery ajax成功回调中创建时弹出窗口被阻止

ajax

谷歌浏览器似乎阻止了我通过jQuery创建的弹出窗口。经过一番调查,window.open在ajax调用成功的情况下,调用似乎是一个问题。有没有解决的办法?我的jQuery
ajax调用返回要打开的URL。所以我有点卡住。

如果我将window.open外部ajax调用置于外部,它将起作用;但是,在内部(即成功事件中)它被阻止。我认为这与上下文有关,但我不确定。

这是我所拥有的:

     window.open("https://www.myurl.com");  // OUTSIDE OF AJAX - no problems 
                                            // with popup

     $.ajax({
        type: "POST",
        url: "MyService.aspx/ConstructUrl",
        data: jsonData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            // Normally loads msg.d which is the url returned from service
            // static url below is for testing
            window.open("https://www.myurl.com");  // THIS IS BLOCKED
        },
        error: function(msg) {
            // alert(error);
        }
    });

阅读 321

收藏
2020-07-26

共1个答案

小编典典

只需在成功回调中打开新窗口:

 $.ajax({
    type: "POST",
    url: "MyService.aspx/ConstructUrl",
    data: jsonData,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        window.open("https://www.myurl.com"); 
    },
    error: function(msg) {
        //alert(error);
    }
});

请注意,您可能必须为此将$ .ajax的async选项设置为false,否则$ .ajax调用之后的代码可以在收到响应之前进行评估。

2020-07-26