Я написал функцию для запуска запросов 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, и он автоматически отправляет ответ без выполнения какого-либо кода.