Браузер не перенаправляет

У меня есть веб-приложение erlang с cowboy и angular.js.

Я запустил свое приложение, открыл браузер в '/' и получил main.html с <input> а также <button>, Когда я нажал кнопку, я отправил http POST запрос к серверу /join/username с угловым $http, получил это POST запрос на сервере и отправка перенаправления в браузер:

{ok, Req4} = cowboy_req:reply(303, [{"Location", <<"/chat.html">>}], <<"">>, Req3)
{:ok, req4, State}

Перенаправить заголовки ответа:

 HTTP/1.1 303 See Other
 connection: keep-alive
 server: Cowboy
 date: Thu, 19 Sep 2013 14:36:01 GMT
 content-length: 0
 Location: /chat.html
 Cache-Control: no-store

После отправки перенаправления я получил запрос "GET" из браузера с путем "/chat.html", все в порядке. Я читаю chat.html и отправляю обратно в браузер, но браузер не отображает его и URL не меняется в браузере. Я вижу chat.html 200 в консоли браузера.

Почему браузер не отображает новую страницу - chat.html?

UPD 1.

если я наберу /join/username в браузере вручную перенаправляет нормально. Зачем?

Спасибо.

1 ответ

Вы говорите, что делаете вызов на сервер, используя $http сервис от угловой. Это означает, что вы делаете вызов AJAX. Данные ответа отправляются success обратный вызов, который вы предоставляете при построении $http вызов. В этом случае ваши данные ответа будут полезной нагрузкой вашего chat.html файл:

$http({method: 'POST', url: '/join/username'}).
  success(function(data, status, headers, config) {
    // data will be the content from chat.html
  });

Браузер только визуально следует перенаправлениям, когда он делает запросы как часть нормального навигационного потока. AJAX-запросы следуют за перенаправлениями, но результат не отображается в окне браузера - вместо этого он возвращается к вашему коду. Вот почему ввод адреса в браузере работает для вас.

Если вы хотите выполнить это перенаправление, вы можете просто отправить HTML-форму напрямую. /join/username и избавиться от вызова Angular AJAX.

Другие вопросы по тегам