AJAX и как лучше всего с ним работать на стороне сервера в PHP

Я начинаю писать довольно много тяжелых веб-сайтов ajax, но я никогда не читал о передовых методах, и теперь, когда я тоже хочу, я не могу найти статью, посвященную тому, что я хочу знать. Что я действительно хочу узнать, так это работа с AJAX-вызовами на стороне сервера, например, должны ли все данные передаваться обратно с использованием JSON/XML, ... или чистый HTML в порядке, если вы пытаетесь не смешивать два для одной функции Звоните в зависимости от результата. Кроме того, поскольку я в основном программирую с использованием CodeIgniter (инфраструктура MVC), как лучше всего разделить обычные запросы на загрузку страниц от результатов AJAX.

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

Спасибо, Том.


person Tom    schedule 03.06.2009    source источник


Ответы (7)


Недавно я завершил сложный сайт AJAX с помощью CodeIgniter и многому научился в процессе. Вот некоторые вещи, которые я узнал (читай: ошибки, которые я сделал):

Не возвращайте html-страницы и json одним и тем же методом.

Сначала казалось хорошей идеей иметь такую ​​​​настройку:

/контроллер/метод/формат

где формат по умолчанию был «html». Идея заключалась в том, чтобы что-то вроде /object/view отображало html-страницу для этого объекта, а что-то вроде /object/view/json возвращало данные json для этого объекта.

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

Вместо этого сейчас я добавляю подпапку «api» в application/controllers. Контроллеры в этой подпапке возвращают только данные json. Это намного чище.

Не переделывайте свои шаблоны в javascript

Существует два подхода при получении данных с помощью вызова AJAX. Вы можете вернуть какие-то закодированные данные (JSON, XML) и вставить их в нужное место на странице. Или вы можете отобразить кусок html, а затем вставить его куда-нибудь в div.

Если вы идете по пути данных, старайтесь придерживаться очень простой структуры разметки, например, диапазона или простого неупорядоченного списка. В моем случае у меня была определенная часть навигации, которая возвращалась с сервера в виде массива ссылок в кодировке JSON.

Затем мой javascript выдал бы их в правильной структуре для меню. Когда меню усложнилось, мой сценарий включил эту сложность. Теперь разметка для этого меню дублируется в шаблонах CI, а также в javascript.

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

Используйте AJAX экономно/осторожно/только по мере необходимости

Вы можете сэкономить некоторые ресурсы сервера, разумно используя запросы AJAX. Однако, если вы увлечетесь (*coughlikemecough*), вы быстро можете запустить несколько AJAX-запросов на одно действие пользователя. Как правило, это хуже с точки зрения производительности, поскольку каждый запрос имеет свою долю накладных расходов, и эти накладные расходы сводят на нет выгоду от запроса только необходимых ресурсов.

Если вы обнаружите, что щелчок по элементу интерфейса запускает более одного запроса AJAX, это красный флаг, чтобы серьезно подумать о том, что происходит. Вы можете создавать сложности без пользы.

Кодировка JSON удобна

Вы можете использовать json_encode() для результатов запроса к базе данных, и он будет генерировать действительно хорошие объекты, с которыми вы сможете работать в своем скрипте. Синтаксис чист и хорошо работает с результатами, которые возвращают функции базы данных CodeIgniter.

Надеюсь, вы найдете что-то из этого полезным. Всегда лучше, когда вы можете учиться на чужих чужих ошибках! :)

person GloryFish    schedule 04.06.2009

JSON/XML или обычный

Я думаю, вы сами должны сделать выбор. Вы можете использовать XML или JSON или просто HTML. Это также зависит от сложности вашей проблемы. Я бы выбрал json, потому что PHP5 имеет очень простые методы для кодирования и декодирования json.

Серверная часть

  • Просто поместите действия AJAX в контроллер. Используйте get для получения данных и post-функцию codeigniter для хранения данных на сервере.
  • Я бы посоветовал ознакомиться с рекомендациями Yahoo для разработчиков, которые гарантируют, что ваш сайт будет бежать молниеносно. Также ajax-запрос должен быть кэширован, если это возможно.

Javascript

jquery делает вызовы json действительно простыми. Вы можете использовать jQuery.get для получения информации и Jquery.post для хранения данных.

Пример

Я также постараюсь разместить простой пример в Интернете, чтобы вы могли его посмотреть.

Удачи,
Альфред Вестервельд

person Alfred    schedule 03.06.2009
comment
Я обнаружил, что использование комбинации необработанного HTML и JSON может быть полезным. например, для вызовов, когда вам просто нужно добавить на страницу сложный блок разметки, используйте html. Для вызовов, где вам нужны структурированные данные, используйте JSON. - person Frank Farmer; 05.06.2009

ну, это зависит от того, что именно вы хотите сделать. потому что простой способ использовать функции ajax - использовать структуру jQuery. В нем есть все, что вам нужно.

person Dan Sosedoff    schedule 03.06.2009

Это не очень удобно, если вы используете AJAX для всего, даже для запросов страниц. У вас будут проблемы с кнопкой назад, закладками, js-off браузерами и т.д. Можно взломать, но не стоит этого делать. Используйте AJAX для отправки небольших сообщений пользователю, или, как вы видите здесь, SO.

person erenon    schedule 03.06.2009

Используйте Ext JS или Jquery, посмотрите, что они предлагают, есть множество ссылок, чтобы увидеть, что они делают.

Посмотрев некоторые демо-версии этих продуктов, вы, вероятно, вдохновитесь использовать некоторые из них на своих веб-сайтах.

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

person Mischa Kroon    schedule 03.06.2009

Это зависит от того, чего вы пытаетесь достичь с помощью AJAX. Обычно существует компромисс между площадью и сложностью.

Например, вызов AJAX может получить с сервера весь сгенерированный список HTML, включая разметку, и просто внедрить его в контейнер, такой как div. Это просто реализовать, но недостатком будет отправка браузеру большего количества байтов.

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

Это действительно зависит от того, чего вы пытаетесь достичь, нет единого общего правила, регулирующего «лучший способ реализации AJAX».

person karim79    schedule 03.06.2009

Если вы не понимаете, как настроить вызовы с помощью Jquery и CodeIgniter, просто помните, что URL-адрес, который вы используете для вызовов AJAX, создается контроллером. Вы можете использовать метод контроллера для создания URL-адреса для вызова AJAX.

Для получения дополнительной информации это руководство помогло мне в качестве введения в AJAX + CodeIgniter.

http://www.mrforbes.com/thoughts/2009/01/28/a-quick-code-igniter-and-jquery-ajax-tutorial/

person wiebersk    schedule 04.06.2009