MVC ajax вызывает - где их обрабатывать? - PullRequest
5 голосов
/ 07 января 2010

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

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 07 января 2010

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

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

protected function isAjax()
{
    return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
            $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest');
}
2 голосов
/ 07 января 2010

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

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

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


Полу-альтернативная идея может состоять в том, чтобы иметь только одно действие в вашем контроллере: /browse/blogs - и всегда вызывать это.

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

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

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

0 голосов
/ 07 января 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...