Как организовать обработчики AJAX на большом сайте? - PullRequest
1 голос
/ 01 декабря 2009

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

Так как я очень разбираюсь в организации, я хочу хранить свои обработчики ajax PHP таким образом, чтобы он был логичным, безопасным и (надеюсь) отдельным.

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

Ответы [ 6 ]

1 голос
/ 01 декабря 2009

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

Лучший способ, которым я видел это в дикой природе, - это обрабатывать ajax-запрос, как любой другой запрос в MVC. Создайте действие контроллера для вашего запроса. В зависимости от размера проекта / личных предпочтений, вы можете создать отдельные логические контроллеры для запросов AJAX или сгруппировать ваши действия AJAX с существующими контроллерами (опционально присвоив имени действия префикс или суффикс «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;
}
1 голос
/ 01 декабря 2009

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

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

0 голосов
/ 27 сентября 2013

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

0 голосов
/ 01 декабря 2009

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

0 голосов
/ 01 декабря 2009

Я тоже так делаю, ранее я использовал для хранения обработчиков ajax с префиксом ajax, например

ajax-updatestatus.php
ajax-managemessages.php

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

0 голосов
/ 01 декабря 2009

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

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

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

...