Я уже несколько часов гуглю. Я прочитал дюжину «ответов» на Stackoverflow, все они используют jQuery.
Это общий ответ ...
Ajax-запрос будет следовать за перенаправлением afaik
Ну, это не так.
Я пытаюсь отправить PUT из формы через собственный JS AJAX
[Пожалуйста, прошу вас, не говорите мне использовать jQuery. Я нашел ошибку в JQuery через PUT
( 1 ), так что я обойду это]
Это мой фрагмент кода ...
var xhr = new XMLHttpRequest();
xhr.open(method, url);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(data);
xhr.onload = function (e) {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
console.log(xhr.responseText);
} else {
console.error(xhr.statusText);
}
}
};
xhr.onerror = function (e) {
console.error(xhr.statusText);
};
Этот блок отлично работает, я могу POST, PUT и DELETE без проблем. Сервер получает данные и обновляет БД в соответствии с отправленным МЕТОДОМ.
My (на основе SLIM) PHP после успешного завершения возвращает 302 и URL-адрес для перехода.
Этот процесс работает с использованием POSTMAN, работающим с PHP, и переходит на нужную страницу.
Открывая Chrome Tools / Network, он показывает, что PHP возвращает 302, а затем 200
Мой объект ответа содержит полный HTML-код страницы в свойстве responseText .
Забавно, что если я жестко закодировал плохой URL, браузер нормально переходит на мою страницу 404.
Твои мысли? (Пожалуйста, не спрашивайте меня и не говорите мне использовать jQuery)
РЕДАКТИРОВАТЬ / ДОБАВИТЬ -----------------------
Я обнаружил, что перенаправление использует тот же метод, что и исходный вызов.
Я делаю
PUT /user/1
Перенаправление делает
PUT http://myserver.test/
Это правильное место. Теперь я понимаю 405.
У меня не определен маршрут PUT, поэтому 405.
Я создаю маршрут PUT, и он работает в POSTMAN, но все равно дает мне 405 в Chrome и Firefox.
У меня есть 2 вопроса для решения:
1) изменить МЕТОД на перенаправлении
2) выяснить, почему браузеру не нравится 307