MVC ajax calls – где их обрабатывать?

У меня есть самокатная MVC-инфраструктура, которую я создаю, и до этого момента удалось избежать необходимости в любых вызовах AJAX. Теперь, однако, я хотел бы создать фид обновления в реальном времени.

Мой вопрос: где обработчики для вызовов ajax обычно хранятся в MVC? Должен ли я хранить их в том же контроллере, который участвует в совершении вызова?

Например, если мой домен www.example.com/browse/blogs (просмотр – это контроллер, блоги – это метод) делает вызов AJAX для обновленного списка блогов, будет ли звонок просто на www.example.com/ browse / update_list или что-то еще?

ИЛИ, так ли это для отдельного контроллера AJAX? www.example.com/ajax/update_blogs

Как ты делаешь это?

Related of "MVC ajax calls – где их обрабатывать?"

Я бы сказал, что запрос Ajax точно такой же, как и не-Ajax: он работает точно так же, на самом деле, с точки зрения протокола HTTP.

Единственное различие заключается в том, что вы возвращаете некоторые неформатированные данные, такие как JSON или XML (эй, это то же самое, что генерировать фид ATOM ^^) или только часть HTML-страницы.

Таким образом, я бы рассматривал их как любой другой «обычный» HTTP-запрос и размещал их так, как я бы делал для запросов, отличных от Ajax.

Альтернативой может быть только одно действие в вашем контролере: /browse/blogs – и всегда вызывайте его.

Но он обнаружил бы, если это происходит через запрос Ajax или нет, и будет:

  • вернуть полную страницу, если вызвано через «обычный» запрос
  • или возвращать только некоторые данные (или часть страницы), если они вызваны с помощью запроса Ajax

Примечание: это не «дикая» идея; Например, Zend Framework предоставляет некоторые материалы для облегчения (см. 12.8.4.3. ContextSwitch и AjaxContext )

Лучшей практикой было бы пренебречь тем фактом, что это запрос AJAX полностью, и только заботиться о том, к какому контроллеру относится ваш запрос AJAX. Если бы у вас был контрольный контроллер AJAX, вы, вероятно, собирали яблоки на груши.

Основное различие заключается в том, что для запросов AJAX вам, вероятно, придется избегать установки каких-либо макетов (и, скорее всего, их просмотра). Это можно легко устранить, если у вас есть метод в родительском классе Controller, который проверяет действительные запросы AJAX:

 protected function isAjax() { return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'); } 

Несмотря на то, что вы не используете asp.net MVC, я бы порекомендовал вам ознакомиться с учебным пособием по nerd, в частности, в разделе AJAX. это поможет ответить на некоторые из ваших вопросов дизайна.

Они имеют отдельное действие на одном контроллере.

http://www.wrox.com/WileyCDA/Section/id-321793.html