在一个网站中有一些jQuery ajax调用,如果成功,其中一些会在另一个域中触发winwdow.open。我拥有其他域站点。
例如:
如何处理此问题?我必须在站点/服务器https://enable-cors.org/上启用CORS吗?
代码(当然,我不属于Google)
$.ajax({
url:'/echo/js/?js=hello%20world!',
complete: function (response) {
$('#output').html(response.responseText);
window.open('https://www.google.com');
},
error: function () {
$('#output').html('Bummer: there was an error!');
},
});
答案 0 :(得分:1)
我最近遇到了像您这样的问题。就我而言,我需要在打开新页面之前执行一些操作。 我要求对锚标记打开新页面,并在操作返回否定结果时使用了preventDefault方法来避免打开页面。
<a href="https://www.google.com" targe="_blank" onclick="doSomeOperation(event)">text</a>
<script>
function doSomeOperation(event){
$.ajax({
async:false,
url:'/echo/js/?js=hello%20world!',
complete: function (response) {
$('#output').html(response.responseText);
},
error: function () {
event.preventDefault();
$('#output').html('Bummer: there was an error!');
},
});
}
</script>
答案 1 :(得分:0)
由于window.open
需要直接的用户操作(例如单击)来避免弹出窗口阻止程序,因此您可以这样更改代码:
$.ajax({
url:'/echo/js/?js=hello%20world!',
complete: function (response) {
$('#output').html(response.responseText);
//window.open('https://www.google.com');
$( "body" ).append('<button id="openPopup">Open Site</button>');
$( "#openPopup" ).click( function() {
window.open('https://www.google.com');
});
},
error: function () {
$('#output').html('Bummer: there was an error!');
},
});
如果ajax请求成功,将向用户显示一个按钮,用户必须单击该按钮才能进入另一个域。
编辑:我认为以下是您的评论:
var myPopup;
$( document ).on("click", "#myButton", function() {
myPopup = window.open("/");
$.ajax({
url:'/echo/js/?js=hello%20world!',
complete: function (response) {
$('#output').html(response.responseText);
//window.open('https://www.google.com');
myPopup.location.href = 'https://www.google.com';
},
error: function () {
$('#output').html('Bummer: there was an error!');
},
});
});
您必须首先为新窗口声明一个全局变量。单击触发ajax请求的按钮后,您将打开一个新窗口,该窗口引用您当前的域(在您的情况下为https://site1.example.com/)。这是直接的用户操作,因此没有弹出窗口阻止程序生效。
在complete
函数中,您可以将该窗口重定向到其他域之一(https://site1.example2.com或https://site2.example.com),等等。我已经使用激活的弹出窗口阻止程序对其进行了测试,并且可以正常工作。