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

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

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

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

ИЛИ, таким образом, это быть к отдельному контроллеру ТОЛЬКО ДЛЯ AJAX? www.example.com/ajax/update_blogs

Как дела это?

5
задан johnnietheblack 6 January 2010 в 22:55
поделиться

3 ответа

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

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

Таким образом, я бы относился к ним как к любым другим "нормальным" HTTP запросам, и размещал бы их так же, как я бы относился к не-Ajax запросам.


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

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

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

Примечание: это не "дикая" идея; Zend Framework, например, предоставляет некоторые вещи, чтобы облегчить это (см. 12). 8.4.3 ContextSwitch и AjaxContext )

.
2
ответ дан 13 December 2019 в 22:09
поделиться

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

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

protected function isAjax()
{
    return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
            $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest');
}
8
ответ дан 13 December 2019 в 22:09
поделиться

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

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

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

0
ответ дан 13 December 2019 в 22:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: