Должен ли я добавить логику AJAX в мои классы / скрипты PHP? - PullRequest
2 голосов
/ 14 февраля 2009

Я только начал создавать сайт на PHP / AJAX, и мне было интересно, где мне добавить функциональность в "только включать содержимое" .

Должны ли я иметь операторы if в моих скриптах верхнего и нижнего колонтитула, которые проверяют параметр "ContentOnly" get? А затем добавить этот параметр в строки запроса в моих вызовах AJAX?

Или я должен использовать фильтр на стороне AJAX только для захвата основного контента Div. Как в jquery:

$(this).load("/myPhpPage.php #mainContentDiv")

Первый способ будет быстрее, верно? Но второй метод позволил бы сохранить функциональность AJAX на стороне презентации и исключить мой PHP.

Или есть третий способ? Я хочу сохранить мои PHP-скрипты без изменений, так что если вы перейдете к ним напрямую, там будут заголовок и нижний колонтитул. Заранее спасибо!

Ответы [ 5 ]

7 голосов
/ 14 февраля 2009

Пожалуйста, не используйте AJAX ради использования AJAX.

Тем не менее, большинство библиотек AJAX передают заголовок HTTP X-Requested-With, указывающий, что это AJAX-запрос. Вы можете использовать этот заголовок, чтобы решить, включать ли ваш верхний / нижний колонтитул и т. Д.

1 голос
/ 17 февраля 2009

В дополнение к сказанному ваше приложение не должно знать о визуализированном представлении. Если вы делаете вызов из javascript - javascript должен знать контекст, в котором был сделан вызов.

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

Опять же, не используйте AJAX, если он не служит реальной цели.

1 голос
/ 14 февраля 2009

В зависимости от того, какую парадигму вы используете для обработки запросов страниц, я обычно рекомендую вам помещать такую ​​обработку в скрипт контроллера. Обработка логики рендеринга представления, которая специфична для типа выполняемого запроса, полностью подходит для размещения на уровне контроллера.

Как предложил ceejayoz, вы можете использовать заголовок X-Requested-With (убедитесь, что он передается функциями ajax вашей библиотеки javascript!), Чтобы проверить в скрипте контроллера, каков источник запроса, и затем отобразить смотреть соответственно.

0 голосов
/ 26 июля 2009

Мне очень пригодился заголовок X-Requested-With:

Метод низкоуровневого типа аутентификации, который перенаправляет на страницу входа в систему ... Когда запросы приходят через AJAX, перенаправление - плохая идея - я хочу вернуть полезную нагрузку XML с ответом об ошибке, поэтому я выбрасываю исключение вместо. Да, я мог бы просто выдать аутентификацию, но тогда мне нужно реализовать обработку на каждой странице и перенаправление туда. Используя X-Requested-With, я могу получить лучшее из обоих миров.

0 голосов
/ 17 февраля 2009

X-Requested-With HTTP, чтобы указать, что его запрос Ajax довольно избыточен. Вызовы Ajax никогда не должны запрашивать HTML, как браузер!

В большинстве случаев вызовы AJAX не должны возвращать ни HTML, ни обычный текст. Убедитесь, что вы указали правильный тип MIME при выполнении запроса к странице, и чтобы страница переключалась на используемый тип MIME. Таким образом, когда браузер запрашивает HTML, он получает HTML, когда вызов AJAX запрашивает XML или JSON или, если вам нужно обычный текст, он получит данные в этом формате.

Редактировать: AHAH - лучший термин в этом случае (техническая часть tho). Я воспринимал контент как данные в OP, именно поэтому я так сильно толкал mime-тип.

Однако я все еще думаю, что получение ALL контента через ajax - плохой дизайн, вы теряете больше, чем получаете. Лучше перейти на новую страницу и показать некоторые функции AJAX в контенте, если это необходимо.

И если эта функциональность AHAH - маленькая ошибка, которую не нужно помещать в историю (например, содержание), пусть даже мой ортодоксальный ум может жить так:)

Даже если у вас есть заголовок, который требует значительных вычислений (т. Е. Древовидное представление), существуют другие параметры кэша, которые будут полезны как для javascript-abled, так и для -disabled, так как предполагается только javascript-abled.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...