Выполнить window.location.replace несколько раз в течение цикла

1

Я не могу заставить мой скрипт запускать window.location.replace несколько раз. У меня есть флеш-приложение, которое создает файлы с учетом уникальных идентификаторов, найденных в журналах потокового доступа на сервере. После того, как файл находится на сервере, у меня есть маршрут фляги, который, если пользователь перенаправлен на 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 работает правильно, и это так. Даже url_path заданный для window.location.replace является правильным. Следует отметить, что при перенаправлении на https://somewebsite.com/getFile/<id> браузер технически не меняет этот URL-адрес, потому что флажок не отображает шаблон, а вместо этого возвращает загрузку файл, поэтому браузер остается на текущем пути URL после загрузки файла.

Я не уверен, почему я не могу заставить скрипт запускать window.location.replace более одного раза. Похоже, если в объекте ответа есть 2 url_path, загружается только последний. То же самое происходит с 3 или 4 дорожками. Любое понимание было бы полезно. Спасибо

  • 0
    Вы можете попробовать использовать window.location.assign вместо window.location.replace
  • 0
    @LeoFarmer Спасибо за ответ, я попытался использовать window.location.assign , но он все еще загружает только один файл. Я проверил журнал сервера и вижу только один запрос GET, а другой нет. выполняется Я добавил console.log после запроса, и он печатает оба раза.
Теги:
xmlhttprequest

2 ответа

1

Альтернативное решение, которое я только что понял, вместо того, чтобы перенаправить один и тот же браузер на несколько URL-адресов, почему бы просто не открыть их на разных вкладках. Я сделал это, используя window.open, что, к моему удивлению, действительно сработало.

Тем не менее, блокиратор блокировки браузера блокировал их сначала, но после изменения настроек и разрешения всплывающих окон для страницы я смог успешно загрузить несколько файлов клиенту. Кроме того, поскольку на стороне сервера нет рендеринга шаблонов, сами вкладки фактически не отображаются, поэтому браузер не будет залит вкладками.

Мне все еще интересно узнать, почему window.location.replace не работает, если кто-нибудь знает, почему.

0

Ваш код не работает, потому что window.location.replace буквально заменяет исходный документ (см. Документацию) на документ, предоставленный новым URL. Это означает, что любой код, который вы поместите после window.location.replace, не будет выполнен.

Вот почему window.open отлично подходит для вашей ситуации, потому что он откроет новый документ, кроме того, который он называется. Но будьте осторожны, потому что не все параметры работают для всех браузеров (проверьте это для спецификаций совместимости).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню