Xpoint
   [напомнить пароль]

Доступ к странице через Ajax и напрямую

Метки: [без меток]
2011-09-12 19:32:15 [обр] Jeika[досье]

Здравствуйте!

Нужно добавить доступ к странице через Ajax, но в то же время оставить возможность доступа напрямую. Соответственно, при запросе через Ajax отдавать не страницу целиком, а только определенный блок. Вопрос - как правильно это реализовать? Нагуглилось про $_SERVER['HTTP_X_REQUESTED_WITH'] - это единственный вариант или есть еще?

спустя 1 час 38 минут [обр] Прокаев2(13/35)[досье]
спустя 32 минуты [обр] Marat Tanalin(3/78)[досье]
Можно ещё все Ajax-адреса поместить в виртуальную подпапку /ajax/.
спустя 19 минут [обр] Филипп Ткачев(20/112)[досье]
Кроме eXtra-headers (дополнительных заголовков) можно использовать и дополнительную переменную.
Например ваша страница имеет URL http://example.com/somepath/somepage/ тогда с Ajax будет запрос вроде http://example.com/somepath/somepage/?ajax=true
А в PHP генерация будет вроде
if (isset($_GET['ajax'])) header();

myblock();

if (isset($_GET['ajax'])) footer();
спустя 3 часа 32 минуты [обр] Thirteensmay(17/157)[досье]
сообщение промодерировано
[отредактировано] Я обескуражен! Зачем нужно то?
спустя 6 часов [обр] Lynn «Кофеман»(98/571)[досье]
спустя 8 часов [обр] Thirteensmay(17/157)[досье]
По моему это архитектурная ошибка. Не надо различия XMLHttpRequest и "прямых" запросов закладывать в логику, как бы там ни было вообще, их нет, а в нашем случае это еще и нарушает структурирование ресурсов. Страница и некий блок это разные ресурсы, не представления, и по определению должны уникально идентифицироваться. Тогда без проблем. Возможно вы хотите таким образом сэкономить, но вы должны понимать возможные последствия, кроме того что это не верно в принципе, задумайтесь о чисто технических моментах, HTTP_X_REQUESTED_WITH отдается далеко не всеми, сложно гарантировать с чем вы будете работать завтра, не всегда есть возможность выставить заголовки, что если потребуется отображать не один и тот же блок а разные, что если запросы пойдут из внешней системы и т.п.
спустя 12 часов [обр] Jeika[досье]

Прокаев2[досье], пока по-быстрому так и сделала.

Lynn «Кофеман»[досье], мне после поста первая статья попалась, ссылка на которую приведена в начале этой, и вариант с Accept как-то не очень понравился, а после прочтения продолжения - тем более.

Thirteensmay[досье],

"Страница и некий блок это разные ресурсы, не представления, и по определению должны уникально идентифицироваться."

Ну, в общем да, Вы правы...

Воспользуюсь тогда способом, предложенным Marat Tanalin[досье] и Филипп Ткачев[досье]

/path/to/page/ajax/ или /path/to/page/ajax=true
/path/to/page/json/ или /path/to/page/json=true
/path/to/page/xml/ или /path/to/page/json=true

Большое всем спасибо!

спустя 7 часов [обр] Thirteensmay(17/157)[досье]

Jeika[досье]

Не надо различия XMLHttpRequest и "прямых" запросов закладывать в логику, как бы там ни было вообще

Поэтому не /path/to/page/?ajax=true a /path/to/page/?onlyblock=myblock или /path/to/page/myblock

спустя 8 часов [обр] Jared(3/26)[досье]

Thirteensmay[досье] прав. С точки зрения архитектуры блок должен иметь собственный идентификатор, а сервер должен отдавать запрошенный ресурс, будь то страница целиком, или отдельный блок. Однако частенько бывает нужно прикрутить ajax плюшки к движку, где такое не предусмотрено. приходится городить костыли.

Лучше опираться на на заголовки, а на собственные параметры в QUERY_STRING:

/path/to/page/?block=myblock_id&format=json
/path/to/page/myblock_id/?format=html
Powered by POEM™ Engine Copyright © 2002-2005