Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在for循环中多次执行window.location.replace_Javascript_Xml_Xmlhttprequest - Fatal编程技术网

Javascript 在for循环中多次执行window.location.replace

Javascript 在for循环中多次执行window.location.replace,javascript,xml,xmlhttprequest,Javascript,Xml,Xmlhttprequest,我无法让脚本多次运行窗口.位置.替换。我有一个flask应用程序,它根据从服务器上的流访问日志中找到的唯一ID创建文件。一旦文件在服务器上,如果用户被重定向到https://somewebsite.com/getFile/,然后将在服务器上创建的文件推送到客户端 下面是我的脚本: <script> var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ var re

我无法让脚本多次运行
窗口.位置.替换
。我有一个flask应用程序,它根据从服务器上的流访问日志中找到的唯一ID创建文件。一旦文件在服务器上,如果用户被重定向到
https://somewebsite.com/getFile/
,然后将在服务器上创建的文件推送到客户端

下面是我的脚本:

<script>

    var xhr = new XMLHttpRequest();

    xhr.onreadystatechange = function(){

        var response = '';

        if(xhr.readyState === 4 && xhr.status === 200){
            response = xhr.responseText;
            response = response.substring(0, response.length-1);
            response = response.split('\n');

            for(x in response){
                url_path = response[x];
                window.location.replace(url_path);
            };
        };
    };

    xhr.open('GET', '{{ url_for('stream')   }}', true);
    xhr.send();


</script>

var xhr=new XMLHttpRequest();
xhr.onreadystatechange=函数(){
var响应=“”;
如果(xhr.readyState==4&&xhr.status==200){
response=xhr.responseText;
response=response.substring(0,response.length-1);
response=response.split('\n');
用于(x响应){
url_path=response[x];
window.location.replace(url\u路径);
};
};
};
open('GET','{url_for('stream')}}',true);
xhr.send();
我执行了几个
console.log()
调用,以查看for循环是否正确运行,并且是否正确。甚至提供给
window.location.replace的
url\u路径
也是正确的。需要注意的一点是,当重定向到
https://somewebsite.com/getFile/
,从技术上讲,浏览器不会更改为该url路径,因为flask不会呈现模板,而是返回下载文件,因此下载文件后浏览器将保持在当前url路径


我不确定为什么无法让脚本多次运行
window.location.replace
。看起来,如果响应对象中有2个url_路径,则只下载最后一个url_路径。3条或4条路径也是如此。任何见解都会有所帮助。谢谢

我刚刚想出的另一个解决方案是,与其将同一个浏览器重定向到多个URL,不如在不同的选项卡中打开它们。我通过使用
window.open
实现了这一点,令我惊讶的是,它确实起了作用

然而,我的浏览器弹出窗口拦截器一开始确实阻止了它们,但在更改设置并允许页面弹出窗口后,我成功地将多个文件下载到客户端。此外,由于服务器端没有模板呈现,因此选项卡本身实际上不会弹出,因此浏览器中不会充斥着选项卡


我仍然有兴趣知道为什么
window.location.replace如果有人知道原因,那么它不起作用。

你的代码不起作用,因为
window.location.replace所做的就是用新URL提供的源文档替换源文档(请参阅)。
这意味着在
window.location.replace
之后放置的任何代码都不会被执行


这就是为什么window.open非常适合您的情况,因为它将打开一个新文档,而不是它所调用的文档。但要小心,因为并非所有参数都适用于所有浏览器(请检查兼容性规范)。

您可以尝试使用
window.location.assign
而不是
window.location.replace
@LeoFarmer感谢您的回复,我尝试使用
window.location.assign
,但它仍然只下载了一个文件。我检查了服务器日志,只看到一个GET请求,而另一个没有。正在执行。我在请求之后添加了一个
console.log
,它会同时打印两次。