Дайте им 200 и они счастливы, как насчет 307?
Было как за комментариями, стало как вверху без комментариев
header('HTTP/1.1 307 '.rawurlencode($url)); //header('Content-type: application/json; charset='.PAGE_ENCODING); //echo json_encode(array('Location'=>$url)); как было внизу - работало, но показалось бредом. Передаешь голимый текст чтобы в нем потом разбираться, в то время как есть нормальные заголовки и статус и текст которых приходят исправно. В отличии от, кстати, responseType, который тупо равен "" Соответственно в js if (status == 307) { location.assign(decodeURI(link.statusText)); return true; } Так вот ФФ редиректит теперь во-первых GET'ом, во вторых х знает куда. Вот ему приходит через форточку (домен заменил) Код:
HTTP/1.1 307 http%3A%2F%2Fexample.com%2Fkontakty%2Fcomeback%2Fsent%3Fid%3D58 Код:
http://example.com/kontakty/http%3A%2F%2Fexample.com%2Fkontakty%2Fcomeback%2Fsent%3Fid%3D58 Про 200 в заголовке из реплики на стыковерфлоу про веб-дизайнеров которые кроме статуса 200 ничего не знают. Я и 302 пробовал - по старым стандартам - эквипенисуально. Короче, как заредиректить клиента через аякс заголовками, или это невозможно? |
Ну то есть с сервера вот так же делается
header('Location: '.$url); Ну казалось бы какая разница - пошлю в скрипт ури и он сделает то же самое. |
Цитата:
|
Цитата:
|
Обычный редирект заредиректит и выдаст в скрипт весь сайт, это же очевидно. А мне надо чтобы не тот канал переключился который позади страницы (аяксом), а чтобы аякс _этот_ канал переключил. Я выдаю в страницу только хтмл сообщения об ошибках, в случае успеха пага перегружается классическим образом. Потом что там кроме формы еще всякие справки, скрипты, стили.
Короче, методом научного самотыка удалось вычислить что во всем виновата rawurlencode(), то есть не она, а парсер браузера, который не видя схемы за всеми эти процентами, тупо подставлял какой-то текущий путь, щетая что я ему подал относительный. Теперь все летает header('HTTP/1.1 307 '.$url); document.location.assign(lnk.statusText); Почему народ не юзает эти заголовки я не знаю, вот статейка за 9 год http://blog.motane.lu/2009/02/11/htt...ajax-requests/ Аффтар, в сущности, предлагает тот же член в другой руке - ввести ключ в дополнительный заголовок, в то время как в message заголовка можно писать что угодно. |
Нет, это можно, залить контент из форточки, однако смысл теряется. Когда форма открыта там еще шапка и попка кроме нее и связанной тряхомудии. Получится что 90 процентов контента надо перезаливать - ну и нафиг, перезагрузил и готово.
|
Цитата:
|
xhr при чем тут? Скрипт только данные получает, ему безразлично с какого именно скрипта и сколько там редиректов сделано чтобы добыть нужную ему информацию. Он сделал запрос к example.com/one_page, а получил с example.com/page_33.
Если вы заинтересованы отследить что откуда - берете все заголовки и проверяете, там все должно быть. Ну а если из скрипта сделать location - страница перезагрузится и скрипт окажется в новой инкарнации. Насколько я понимаю скрипт может слать запросы еще и еще. Не получил что надо - сам ищет по другому URI. Страница в это время просто стоит. Она же хтмл, загружена, ей уже все пофигу. Бывает я так искорежу коды php что там ничего уже заведомо не отрендерится - а по аяксу все шарашит. |
Теперь все красиво
if($this->ajax) header('HTTP/1.1 307 '.$url); else header('Location: '.$url); exit; Может кто не знает или не знал: не обязательно заводить ajax.php, или цеплять гетом в action ?ajax, есть же заголовки: Между open и send вставляется link.setRequestHeader("X-Requested-With", "XMLHttpRequest"); на сервере диагностируется protected function get_ajax() { return (int) !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strcasecmp($_SERVER['HTTP_X_REQUESTED_WITH'],'xmlhttprequest')==0; } |
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 23:04. |