Javascript 使用ajax中的参数调用window.open
我有一个网页,可以使用window.open和一些请求参数打开一个弹出窗口。参数是从ajax调用获得的,window.open在xhr的处理程序中被调用Javascript 使用ajax中的参数调用window.open,javascript,xmlhttprequest,Javascript,Xmlhttprequest,我有一个网页,可以使用window.open和一些请求参数打开一个弹出窗口。参数是从ajax调用获得的,window.open在xhr的处理程序中被调用 var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (this.readyState == 4) { switch (this.status) { case 200: wi
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (this.readyState == 4) {
switch (this.status) {
case 200:
window.open("script.php?param2="+this.responseText, "_blank", "...");
break;
default:
alert('aw snap');
break;
}
}
};
xhr.open("GET", "first_script.php?param1=3", false);
xhr.send();
正如您所看到的,这个ajax调用是同步的,它在浏览器控制台中生成警告。如果将此ajax调用设为异步,则不会出现警告,但弹出窗口将被浏览器阻止,因为它不是由用户直接调用的
我基本上需要使用ajax调用获取一些数据,等待它,然后使用获取的数据作为请求参数调用window.open
我在这里看到了有关如何等待异步请求的解决方案:
但是,该主题中的讨论建议完全避免同步调用,因为这被认为是一种不好的做法
我真的很困惑。你能给我一个提示,如何实现这种行为,正确的方法?我认为,我试图实现的行为是相当普遍的。必须有一种正常的方法来实现这一点,而不必重新发明轮子。您应该避免使用同步XHR,因为它在现代浏览器中已被弃用 弹出窗口拦截器通常可以阻止显示的每个弹出窗口,这些弹出窗口不是由用户直接操作触发的,比如单击按钮或链接 问题的解决方案是在发送异步XHR之前创建并存储一个新窗口,并在收到响应时更改其位置:
var newWindow = window.open("", "_blank");
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (this.readyState == 4) {
switch (this.status) {
case 200:
newWindow.location = "script.php?param2="+this.responseText;
break;
default:
alert('aw snap');
break;
}
}
};
xhr.open("GET", "first_script.php?param1=3", true);
xhr.send();
为什么你不从一开始就把表单发布到一个新窗口?@epascarello因为它需要在用户actionWow上完成,没想到会这么简单。非常友好。