Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.10.2014, 15:39
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Дайте им 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

GET /kontakty/http%3A%2F%2Fexample.com%2Fkontakty%2Fcomeback%2Fsent%3Fid%3D58 HTTP/1.1
То есть приклеивает полученный URI к части старого по непонятно какому принципу.

Про 200 в заголовке из реплики на стыковерфлоу про веб-дизайнеров которые кроме статуса 200 ничего не знают.

Я и 302 пробовал - по старым стандартам - эквипенисуально.

Короче, как заредиректить клиента через аякс заголовками, или это невозможно?
Ответить с цитированием
  #2 (permalink)  
Старый 15.10.2014, 15:42
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Ну то есть с сервера вот так же делается

header('Location: '.$url);

Ну казалось бы какая разница - пошлю в скрипт ури и он сделает то же самое.
Ответить с цитированием
  #3 (permalink)  
Старый 15.10.2014, 15:43
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kostyanet
Короче, как заредиректить клиента через аякс заголовками, или это невозможно?
Обычный http-редирект чем не устраивает?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 15.10.2014, 15:44
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kostyanet
Ну казалось бы какая разница - пошлю в скрипт ури и он сделает то же самое.
Дык че, не работает чтоли? А пачиму?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 15.10.2014, 16:30
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Обычный редирект заредиректит и выдаст в скрипт весь сайт, это же очевидно. А мне надо чтобы не тот канал переключился который позади страницы (аяксом), а чтобы аякс _этот_ канал переключил. Я выдаю в страницу только хтмл сообщения об ошибках, в случае успеха пага перегружается классическим образом. Потом что там кроме формы еще всякие справки, скрипты, стили.

Короче, методом научного самотыка удалось вычислить что во всем виновата rawurlencode(), то есть не она, а парсер браузера, который не видя схемы за всеми эти процентами, тупо подставлял какой-то текущий путь, щетая что я ему подал относительный.

Теперь все летает

header('HTTP/1.1 307 '.$url);


document.location.assign(lnk.statusText);


Почему народ не юзает эти заголовки я не знаю, вот статейка за 9 год http://blog.motane.lu/2009/02/11/htt...ajax-requests/

Аффтар, в сущности, предлагает тот же член в другой руке - ввести ключ в дополнительный заголовок, в то время как в message заголовка можно писать что угодно.

Последний раз редактировалось kostyanet, 15.10.2014 в 16:32.
Ответить с цитированием
  #6 (permalink)  
Старый 15.10.2014, 16:38
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Нет, это можно, залить контент из форточки, однако смысл теряется. Когда форма открыта там еще шапка и попка кроме нее и связанной тряхомудии. Получится что 90 процентов контента надо перезаливать - ну и нафиг, перезагрузил и готово.
Ответить с цитированием
  #7 (permalink)  
Старый 15.10.2014, 17:00
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kostyanet
Обычный редирект заредиректит и выдаст в скрипт весь сайт, это же очевидно
Почему это очевидно? Мне вот не очевидно. Я не знал что xhr делает прозрачный редирект. Я раньше замечал редиректы, но думал, что фича jQuery. Печально, очень печально. Ибо это и должно быть фичей какой-нибудь jQuery, а не встроено в браузер. Или это наоборот правильно?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 15.10.2014, 17:24
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

xhr при чем тут? Скрипт только данные получает, ему безразлично с какого именно скрипта и сколько там редиректов сделано чтобы добыть нужную ему информацию. Он сделал запрос к example.com/one_page, а получил с example.com/page_33.

Если вы заинтересованы отследить что откуда - берете все заголовки и проверяете, там все должно быть.

Ну а если из скрипта сделать location - страница перезагрузится и скрипт окажется в новой инкарнации.

Насколько я понимаю скрипт может слать запросы еще и еще. Не получил что надо - сам ищет по другому URI. Страница в это время просто стоит.

Она же хтмл, загружена, ей уже все пофигу. Бывает я так искорежу коды php что там ничего уже заведомо не отрендерится - а по аяксу все шарашит.
Ответить с цитированием
  #9 (permalink)  
Старый 15.10.2014, 17:30
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Теперь все красиво

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;
}
Ответить с цитированием
  #10 (permalink)  
Старый 15.10.2014, 17:33
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kostyanet
xhr при чем тут?
Дык ты не через него делаешь запрос?

Сообщение от kostyanet
link.setRequestHeader("X-Requested-With", "XMLHttpRequest");
А это тогда причем?
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дайте наставление по скрипту. Как вариант Greasemonkey kobrin13 Общие вопросы Javascript 13 12.08.2014 22:15
AngularJS/Backbone/Ajax как они взаимодействуют с базами данных? Dionid Общие вопросы Javascript 0 15.06.2014 13:44
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25