Собственный вызов ajax не перенаправляет на 302 - PullRequest
0 голосов
/ 30 апреля 2018

Я уже несколько часов гуглю. Я прочитал дюжину «ответов» на 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

1 Ответ

0 голосов
/ 01 мая 2018

Я нашел "а" решение. Я не уверен, что мне это нравится, но ...

  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) {
        window.location.replace(xhr.responseURL);  // <---- solution
    }
  };
...