2009-12-01 3 views
1

Простой вопрос ... Я использую структуру MVC для создания моего сайта (его довольно большой, поэтому он помогает при обслуживании. Теперь я начинаю интегрировать несколько интересных функций AJAX, чтобы объединить вещи для Javascript/AJAX.Как организовать обработчики AJAX на большом сайте?

Поскольку я так анальным об организации, я хочу сохранить свои АЯКС PHP обработчиков таким образом, что логично, безопасный, и (надеюсь) отдельный.

Как организовать свой? есть ли лучшая практика?

ответ

2

Для меня лучшим решением является наличие переднего контроллера index.php, который обрабатывает как создание страниц, так и ajax-запросы, а также те же файлы, которые создают страницы, делают ajax вещи для вас, даже шаблоны и перезагрузка модуля.

Это упрощает все, и у вас есть единая структура.

+0

Вопрос об этом методе. Может ли тот же обработчик ajax быть вызван 2 или 3 раза одновременно? Существуют ли ограничения или характеристики производительности при использовании одного и того же файла для всей вашей обработки ajax? – BenRacicot

+1

Зачем нужны ограничения? Это то же самое или даже лучше использовать один файл, чем несколько, если вы кешируете файлы php, а не быстрее. – dfilkovi

0

Шахта хранится в указанной папке _ajaxHandlers, эта папка содержит файлы, такие как updatePageList.php, deletePage.php, etc).

Я не уверен, что это лучший способ сделать это, так как я также относительно новичок в концепции ajax :) Любые предложения по улучшению хранения/обработки файлов также оцениваются мной.

Подчеркнутый символ в dirname - это потому, что мне нравятся алфавитные папки, отсортированные по их назначению. В моей структуре подчеркнутые имена папок рассматриваются systemdirs.

+0

Это папка в общей папке? (им предполагается, что это должно быть, но я хочу убедиться) – johnnietheblack

+0

Да, это, по крайней мере, для моих классов системы. По умолчанию список каталогов отключен. – Ben

+0

Имеет ли значение, является ли оно общедоступным или список каталогов отключен? Проверка JavaScript по крайней мере так же просто, как попытка взглянуть на сервер. – Nosredna

0

Я такие же, как хорошо, ранее я использовал для хранения АЯКСА обработчиков с ajax- префикса как

ajax-updatestatus.php 
ajax-managemessages.php 

но недавно я переехал к использованию новой папки

0

если вы используете JQuery или в другой фреймворке вы можете отличать запросы изначально с заголовком $ _SERVER ['HTTP-X-REQUEST-BY'] в существующих существующих методах. Таким образом, у вас есть ajax и обычный запрос на одном и том же месте, поэтому структурных изменений нет.

1

Нет лучших практик, и это одно из мест в проектах PHP, где вещи быстро уходят с рельсов с большим количеством отдельных файлов вне структуры контроллера. Проверьте свои документы по инфраструктуре, чтобы узнать, предлагают ли они какие-либо рекомендации в этой области, как все более распространенный способ создания приложений.

Лучший способ, которым я видел это в дикой природе, - это обработать запрос ajax, как любой другой запрос в MVC. Создайте действие контроллера для вашего запроса. В зависимости от размера проекта/личных предпочтений, вы можете создать отдельные логические контроллеры для AJAX запросов, или группировать Аякс действие с существующими контроллерами, (возможно, давая имя действия «Аякс» префикс или суффикс)

class IndexController extends BaseMvcController{ 
    public function indexAction(){} 

    public function ajaxuserinfoAction(){} 
} 

// или

class AjaxController extends BaseMvcController{ 
    public function userinfoAction(){} 
} 

Это все еще оставляет, как справиться с видом на часть вашего запроса. Я стал большим поклонником создания объектов stdClass, а затем использовал echo json_encode($object); с header('Content-Type: application/json');.

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

protected function outputJsonForAjax($object) 
{ 
    header('Content-Type: application/json'); 
    echo json_encode($object); 
    exit; 
} 
0

Как насчет каждый Ajax вызова имеет идентификатор (который вы должны задокументировать каким-то образом, если у вас есть много из них), и все обработчики находятся в одном файле с огромным задним концом case loop.Or, если он будет большим файлом, возможно, организует их в нескольких файлах - форма id 3001, 3002, 3003 отправляется в formHandler.php id 4001 400n переходит в систему компоновки и скоро.