Браузер не перенаправляет
У меня есть веб-приложение 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.