document.location.reload (true) отменено в chrome - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть функция, чтобы проверить, есть ли результаты на сервере.

var d = document;
var dl = d.location;
var w = window;
var wt = w.setTimeout;
var X = XMLHttpRequest;
function _checkreload() {
    var x = new X();
    x.open('GET', '?test=results');
    x.onreadystatechange = function (c) {
        if (x.readyState === 4) {
            if (x.status == 205) {
                dl.reload(true);
            } else {
                wt(_checkreload, 200);
            }
        }
    };
    x.send();
};

_checkreload();

Иногда перезагрузка отменяется по неизвестной причине:

enter image description here

Вопрос

Как узнать, по какой причине перезагрузка отменена?

Подробности запроса

Поскольку запрос отменен, в информации нетпанель подробностей.Даже если некоторые байты были отправлены на сервер (или даже получены ответы от сервера обратно в браузер), Chrome не отображает их.

Ответы [ 2 ]

0 голосов
/ 12 января 2019

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

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

window.addEventListener('load', function(event){
    var d = document;
    var dl = d.location;
    var w = window;
    var wt = w.setTimeout;
    var X = XMLHttpRequest;
    function _checkreload() {
        var x = new X();
        x.open('GET', '?test=results');
        x.onreadystatechange = function (c) {
            if (x.readyState === 4) {
                if (x.status == 205) {
                    dl.reload(true);
                } else {
                    wt(_checkreload, 200);
                }
            }
        };
        x.send();
    };

    _checkreload();
});

Если для этого критично время каждые 200 мс, вы можете установить прослушиватель событий для loadstart и loadend окна с временными метками для каждого.Разница между событиями - это ваше смещение для начальных setTimeout.

0 голосов
/ 09 января 2019

попробуйте добавить try {} catch в вашу _checkReload функцию.Это поможет вам узнать, в чем заключается ошибка, если она на стороне JS.

var d = document;
var dl = d.location;
var w = window;
var wt = w.setTimeout;
var X = XMLHttpRequest;
function _checkreload() {
    try { // Add a try here...
        var x = new X();
        x.open('GET', '?test=results');
        x.onreadystatechange = function (c) {
            if (x.readyState === 4) {
                if (x.status == 205) {
                    dl.reload(true);
                } else {
                    wt(_checkreload, 200);
                }
            }
        };
        x.send();
    } catch (err) { console.log(err); } // ... and a catch there.
};

_checkreload();

Поскольку ваша функция перезагружает страницу HTML, я рекомендую вам включить функцию сохранения журнала наИнструменты разработчика Chrome.Это очень помогает при отладке.

И последнее, но не менее важное: обратите внимание, что если вы запускаете этот код с локального хоста, вы можете столкнуться с ошибками CORS .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...