【问题标题】:Perform window.location.replace multiple times in for loop在for循环中多次执行window.location.replace
【发布时间】:2018-05-01 23:39:16
【问题描述】:

我无法让我的脚本多次运行window.location.replace。我有一个烧瓶应用程序,它根据从服务器上的流式访问日志中找到的唯一 ID 创建文件。一旦文件在服务器上,我有一个烧瓶路由,如果用户被重定向到https://somewebsite.com/getFile/<id>,它会将在服务器上创建的文件推送到客户端。

下面是我的脚本:

<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>

我调用了几个console.log() 来查看for 循环是否正确运行。即使是给window.location.replaceurl_path 也是正确的。需要注意的一点是,当重定向到https://somewebsite.com/getFile/&lt;id&gt; 时,浏览器在技术上不会更改为该 url 路径,因为flask 没有呈现模板,而是返回下载文件,因此浏览器停留在当前 url文件下载后的路径。

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

【问题讨论】:

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

标签: javascript xml xmlhttprequest


【解决方案1】:

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

但是,我的浏览器弹出窗口阻止程序起初确实阻止了它们,但在更改设置并允许页面弹出窗口后,我成功地将多个文件下载到客户端。另外,由于服务器端没有模板渲染,标签页本身并没有真正弹出,所以浏览器不会被标签页淹没。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-02
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      相关资源
      最近更新 更多