У меня есть самопрокрученная платформа MVC, которую я создаю, и до этой точки сумели избежать потребности в любых вызовах Ajax. Теперь, однако, я хотел бы создать канал обновления в реальном времени.
Мой вопрос, где обычно обработчики для вызовов ajax хранятся в MVC? Я должен сохранить их в том же контроллере, который вовлечен в совершение звонка?
Например, если мой домен www.example.com/browse/blogs (обзор является контроллером, блоги, является методом), действительно ли созданием является Ajax, призывают к обновленному списку блогов, вызов просто был бы на www.example.com/browse/update_list или что-то?
ИЛИ, таким образом, это быть к отдельному контроллеру ТОЛЬКО ДЛЯ AJAX? www.example.com/ajax/update_blogs
Как дела это?
Я бы сказал, что запрос Ajax точно такой же, как и запрос не-Ajax: он работает точно так же, фактически, с точки зрения HTTP протокола.
Единственная разница в том, что вы возвращаете некоторые не-форматированные данные, как JSON или XML (эй, это то же самое, что генерация ATOM-ленты ^^ ), или только часть HTML-страницы.
Таким образом, я бы относился к ним как к любым другим "нормальным" HTTP запросам, и размещал бы их так же, как я бы относился к не-Ajax запросам.
Полуальтернативной идеей может быть наличие только одного экшена в вашем контроллере : /browse/blogs
-- и всегда вызывать этот экшен.
Но, он определит, происходит ли это через Ajax запрос или нет, и будет :
Примечание: это не "дикая" идея; Zend Framework, например, предоставляет некоторые вещи, чтобы облегчить это (см. 12). 8.4.3 ContextSwitch и AjaxContext )
.Наилучшей практикой было бы полностью игнорировать тот факт, что это запрос AJAX, и заботиться только о том, к какому контроллеру относится ваш запрос AJAX. Если бы у вас был AJAX-контроллер, вы, скорее всего, сгруппировали бы яблоки в груши, так сказать.
Основное отличие заключается в том, что для запросов AJAX, скорее всего, вам придется избегать настройки каких-либо данных о компоновке (и более чем вероятном представлении). Это легко исправить, имея в родительском классе контроллера метод, который проверяет действительные AJAX-запросы:
protected function isAjax()
{
return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest');
}
Несмотря на то, что вы не используете asp.net MVC, я бы порекомендовал вам просмотреть учебник "ботанический ужин", а именно раздел AJAX. он поможет вам ответить на некоторые из ваших вопросов по дизайну.
У них есть отдельное действие на одном контроллере.