簡體   English   中英

為什么帶有“ _blank”的AJAX響應對於第一個功能有效,但對第二個功能無效?

[英]Why does the response of AJAX with “_blank” work for first function, but not the second function?

我有一個jsp,其中有兩個單選按鈕,根據單擊的按鈕,我調用了相應的函數。 這兩個函數都具有ajax調用,成功響應將在新選項卡中打開新的url。 第一個功能可以完美地完成它,但是第二個功能不能正常工作。

控制台什么都不顯示。 (Chrome)彈出式窗口攔截器會阻止來自第二個函數的Ajax響應的響應鏈接,但不會阻止第一個函數的ajax響應。我不希望(chrome)瀏覽器的彈出式窗口攔截器對其進行阻止。 在Firefox和Safari中不會發生這種情況。 我還沒有嘗試過針對IE。 但是目前僅在Chrome中發生。

function submit(){


    if($('input[name=questionOption]:checked').val() == "A"){   
        yesHelper();                                        
    }else if($('input[name=questionOption]:checked').val() == "B"){
        addHelper();
    }

}

function yesHelper(){
    var token = $("meta[name='_csrf']").attr("content");
    var header = $("meta[name='_csrf_header']").attr("content");

    var AQuestion = document.getElementById("A_Actual_Question_Id").value;
    var lang= "T";

    var stringifiedInput = JSON.stringify({"A_Actual_Question" : AQuestion, "language" : "T"}); 
    alert(stringifiedInput);
    $.ajax({
        url: "/Abcd/efgh/add1",
        type: "POST",           
        async: false,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        cache: false,
        data: stringifiedInput,
        beforeSend: function(xhr) {
            xhr.setRequestHeader(header, token);
        },
        success: function(response){
            window.open("http://localhost:8080/Abcd"+response, '_blank');
        }
    });         
}

function addHelper(){
    var token1 = $("meta[name='_csrf']").attr("content");
    var header1 = $("meta[name='_csrf_header']").attr("content");

    var B_Question = document.getElementById("B_ActualQuestion_Id").value;
    var lang1= "T";
    var B1 = document.getElementById("B1_Id").value;


    var stringifiedInput_B = JSON.stringify({"B_Question" : document.getElementById("B_ActualQuestion_Id").value,
    "language" : "T",
    "B1" : B1

    });

    $.ajax({
        url: "/Abcd/efgh/add2",
        type: "POST",           
        async: false,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        cache: false,
        data: stringifiedInput_B,
        beforeSend: function(xhr) {
            xhr.setRequestHeader(header1, token1);
        },
        success: function(response1){
             window.open("http://localhost:8080/Abcd"+response1, '_blank');

        }
    });         

}

如果您不希望瀏覽器阻止彈出窗口,則必須通過某種用戶交互(例如單擊某項)直接其打開–否則,大多數當前的瀏覽器將以默認設置將其阻止,因為彈出窗口是在沒有用戶的情況下打開的互動通常是用戶不想要的(廣告或其他煩人的東西。)

現在,首先發出異步AJAX請求,然后嘗試在成功處理程序中打開彈出窗口,已將其與初始用戶交互“分離”。

您可以嘗試:

  • 發出同步AJAX請求(不推薦),

  • 首先打開彈出窗口(地址about:blank ),發出AJAX請求,然后再更改彈出窗口的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM