Различные классы и конфигурации для действий AJAX и не AJAX - PullRequest
0 голосов
/ 18 сентября 2010

У меня есть сайт, где люди могут делать ставки на продукты. Итак, первое, что я сделал, это создал нормальную HTML-PHP версию сайта, которая прекрасно работает.

Я создал несколько основных функций PHP, которые смотрят на URL -> направляют вас к контроллеру -> выполняют действие -> принимают объект POST и т. Д.

Теперь я реализовал версию AJAX для этого действия, но я хочу знать, правильно ли я поступаю.

Я создал новую папку с именем ajax, и там я создал новый контроллер для запроса ajax. Теперь, когда кто-то нажимает на «bid», запрос перехватывается Javascript и отправляется контроллеру AJAX. Теперь в контроллере AJAX я убираю ссылку, а затем загружаю контроллер и модель, и работа выполняется классом.

Теперь ответ, который должен отправить класс, отличается для версии AJAX и для версии HTML. Теперь в коде класса у меня есть что-то вроде этого

if(ajax version){
    give ajax response
}else{
    give html response
}

Теперь в классах есть и другие вещи.

Теперь мой вопрос: можно ли использовать одни и те же классы и файлы конфигурации для функций ajax и non ajax, или они должны быть разделены?

Или есть более элегантный способ решения этой проблемы, возможно, с использованием интерфейсов.

Ответы [ 4 ]

0 голосов
/ 18 сентября 2010

Если вы правильно следуете шаблону MVC, как это выглядит из вашего описания, то для каждого запроса у вас должно быть другое действие.

Расход должен быть

  • другой URL-адрес и действие для получения запроса AJAX
  • выполнить бизнес-логику в вашей модели
  • действие должно затем отформатировать ответ в требуемом стиле (AJAX)

Имея переключатель (оператор if) в общем контроллере, вы рискуете добавить логику в контроллер, что уменьшает возможность повторного использования вашего кода.

Итак, проще говоря. Иметь другую страницу PHP для различных действий.

0 голосов
/ 18 сентября 2010

AJAX-запросы имеют заголовок HTTP_X_REQUESTED_WITH со значением XMLHttpRequest

Например:

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){
  // Ajax
} else {
  // Normal request
}
0 голосов
/ 18 сентября 2010

Как правило, лучше использовать ту же модель и контроллер и, основываясь на данных в запросе (таких как значение в строке запроса или пользовательский заголовок, такой как X-Requested-By) , переключение видов (возможно, между представлением шаблона HTML и представлением JSON).

0 голосов
/ 18 сентября 2010

Простой способ сделать это - установить параметр GET или POST в запросе при использовании AJAX, например, ajax=1, затем проверить это в PHP:

if (isset($_GET['ajax'])){
    give ajax response
} else {
    give html response
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...