gpt4 book ai didi

javascript - 为什么 AJAX 的响应为 "_blank"对第一个函数起作用,但对第二个函数不起作用?

转载 作者:行者123 更新时间:2023-12-02 15:01:34 25 4
gpt4 key购买 nike

我有一个jsp,其中有两个单选按钮,并根据单击的按钮调用相应的函数。这两个函数都有 ajax 调用,成功响应会在新选项卡中打开新网址。第一个函数完美地完成了任务,但第二个函数无法正常工作。

控制台没有显示任何内容。 (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请求,然后更改弹出窗口的位置。

关于javascript - 为什么 AJAX 的响应为 "_blank"对第一个函数起作用,但对第二个函数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35403846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com