Запрос Firefox JS XMLHttpRequest не выполняет функцию GET NodeJS - PullRequest
0 голосов
/ 22 июня 2019

Я написал функцию для запуска запросов GET к моему бэкэнду, используя XMLHttpRequest.До сих пор я тестировал его с Chrome, и все работает.Но теперь я попробовал его в Firefox, и он не работает должным образом.

Что должно произойти, так это, как только этот запрос GET запущен, серверная часть выполнит некоторую обработку и ответит стороне клиента с некоторым статусомстроковое значение (т. е. успех, ошибка и т. д.).Затем я делаю что-то с этим статусом в клиентском приложении.

В Chrome я получаю правильный ответ, и мой бэкэнд работает как положено.В Firefox, как только этот запрос GET будет запущен, серверный ответ с 302 Forward to home page '/'.Он не отвечает строкой состояния, он возвращает HTML-код домашней страницы.Что наиболее вероятно из-за 302 ...

Вот мой код XMLHttpRequest:

<script>
    var HttpClient = function() {
        this.get = function(aUrl, cbk) {
            var HttpReq = new XMLHttpRequest();

            HttpReq.open( "GET", path, true );    
            HttpReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest');  

            HttpReq.onreadystatechange = function() { 
                if (HttpReq.readyState == 4 && HttpReq.status == 200)
                    cbk(HttpReq.responseText);
            }
            HttpReq.send( null );
        }
    }

    var httpClient = newHttpClient();

    httpClient.get('/someURLPath', function(res) {
        // Do something with the response.
    }
</script>

Я читаю онлайн, и кажется, что Firefox обрабатывает XMLHttpRequest по-другому, и ему нужно некоторое разрешение, чтобызадний конец не перенаправляет автоматически.Вот почему я добавил setRequestHeader('X-Requested-With', 'XMLHttpRequest'), но это, похоже, ничего не делает.

Есть идеи, что я здесь делаю неправильно?Спасибо!

РЕДАКТИРОВАТЬ Я также пытался добавить следующее в свой серверный узел nodejs, не повезло, похоже, проблема тоже не решается ...

app.use(function(req, res ,next){
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type');
    next();
});

РЕДАКТИРОВАТЬ # 2 Итак, я понял, почему он перенаправляет на домашнюю страницу '/'.У меня есть следующее в моем приложении nodejs:

router.get('/someURLPath', checkOrder, async function(req, res, next){...});

function checkOrder(req, res, next) {
    if(checkOrder === 'OK') { return next(); }
    else res.redirect('/'); // <<-----------WHERE IT REDIRECTS TO HOME
}

Так что кажется, что вместо выполнения кода в router.get, он идет прямо к функции checkOrder, не видит checkOrder установленным в OK (обработкаэто находится в router.get, который не выполняется) и перенаправляет его на домашнюю страницу '/'.И именно поэтому мое клиентское приложение получает HTML-код домашней страницы внутри HttpReq.responseText.

Так почему же оно пропускает весь код в router.get?Похоже, что серверу не нравится что-то в GET-запросе XMLHttpRequest, и он автоматически отправляет ответ без выполнения какого-либо кода.

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