С тех пор как сочетание “Web 2.0″ пришло в массы, все чаще разработчикам сайтов приходиться добавлять “web 2.0 красивости” к сайтам. Очень помогает в этом JavaScript фреймверк jQuery. Описывать все прелести данного фреймверка я думаю не имеет смысла (о нем и так слишком много написано), но мне, как PHP разработчику, нехватало удобного сервер сайда для генерации AJAX ответа, в итоге на свет появилась PHP библиотека jQuery-PHP…
Что в данной библиотеке особенного? Ну во первых это синтаксис – он очень схож с JavaScript частью, вот вам пример:
$('#test0').html('new content');
PHP код для генерации такого скрипта выглядет следующим образом:
jQuery('#test0') -> html('new content');
Как видим из примера – синтаксис действительно повторяет знакомый для многих jQuery. Это конечно простенький примерчик, попробуем что-нить посложнее:
jQuery('#test3 div') -> bind('click', array('test'=>'answer'), 'eventAlert')
-> css ('cursor', 'pointer')
-> css ('color', '#0000ff')
-> css ('textDecoration', 'underline');
или даже так:
jQuery('#test2 div') -> html(date('H:i:s') . ': new content')
-> css('backgroundColor' , '#0000ff')
-> filter('.red')
-> css('backgroundColor' , '#ff0000')
-> filter('filter')
-> css('backgroundColor' , '#00ff00');
Как видим – даже такие относительно сложные цепочки работают.
На данный момент я не смог протестировать работу всех функций, знаю точно, что существуют следующие ньюансы:
- методам jQuery, которым в качестве параметров могут быть переданы callback функции могут быть вызваны в PHP, но javascript функции не могут генерироваться на лету, следовательно в качестве параметров следует использовать имя существующей функции
- для поддержки callback функций приходиться писать правила исключения в файле jquery.php.js (см. мегасвитч начинающийся с 30-ой строки)
- совсем не тестировалось с плагинами
Так же в данной бибилотеки есть служебные методы:
- addMessage – добавить сообщение
- addError – добавить сообщение о ошибке
- evalScript – выполнить javascript
Недостатки:
- Незначительно увеличивается нагрузка на сервер
- Со сменой дизайна (или при поддержке скинов в системе) могут возникнуть осложнения
P.S. Данная библиотека очень схожа по назначению с Xajax, только на клиентской части используется jQuery и небольшой класс для разбора ответа сервера.
P.P.S. Будет не совсем честно. если я скажу что писал данную библиотеку самолично, в написании её мне помогали два человека: Дмитрий Чиркин и Владимир Котушенко (точнее они начинали, а я взял молоток и зубило и все переделал заново)…
This entry was posted
on Wednesday, January 9th, 2008 at 12:23 and is filed under JavaScript, PHP.
You can follow any responses to this entry through the RSS 2.0 feed.
You can leave a response, or trackback from your own site.


А какой смысл генерировать таким образом JS-код? Может лучше его сразу на JS и писать?
А потом делать eval?
Типа:
$script[] = '$("#asd").html("content");'; echo json_encode($script);И в JS делать eval для каждого вхождения?
Или Вы имеете ввиду делать по старинке? Послали запрос и js функцией обработали ответ?
– Так смысл данной библиотеки как раз в том, чтобы не надо было писать js функций, только PHP…
А мне библиотека понравилась.
Скажу прямо – я ещё её не использовал ни в одном проекте, но попробую обязательно.
Единственное, что меня смущает – смена дизайна.
Хорошо, если дизайнер обучающийся и в состоянии понять что и где. Мой – до сих пор присылает мне нарезанные макеты в виде php+inc файлы.
И 20% времени уходит на то, чтобы понять, что же он имел ввиду.
Активно пользую jquery почти во всех проектах.
Пока не очень понимаю как связать php и jquery (
Интересно, надо будет попробовать библиотеку…
[...] Может кому пригодиться еще библиотека для PHP: http://anton.shevchuk.name/php/php-library-for-jquery/ Tags: JavaScript, jquery | March 3rd, 2008 | 2 [...]
Походу такой подход может оказаться удобным, но в некоторых случаях есть существенный недостаток. Зависимость от PHP и соответственно от сервера. Так в целом идея неплохая!
[...] я уже писал о библиотеке jQuery-PHP, и вот совсем недавно обнаружил, [...]
не использовал jquery, на мой взгляд mootools имеет на много больше возможностей, хотя возможно и ошибаюсь.
@Dmitry
Дело вкуса и привычки :)
Кому-то больше нравится Prototype, кому-то jQuery. Вам – Mootools.
[...] Для организации работы с PHP использую бибилотеку jQuery-PHP, удобно если Вам нравится jQuery ;), подробней читаем в статье PHP библиотека для jQuery [...]
[...] Для организации работы с PHP использую бибилотеку jQuery-PHP, удобно если Вам нравится jQuery ;), подробней читаем в статье PHP библиотека для jQuery [...]
за весь день перелопатил в инете кучу инфы по jquery. так и не смог найти ни одного примера как из select (формируется посредством php) не перегружая форму (все примеры приведенные в инете требуют нажатия кнопки submit) получить новое значение (ну к примеру для использования в следующем select).
Хм… прикольно, в форме глюк.
Тыкаю кнопку HTML или JS или CSS, а слэш ставится в кнопке php.
Поправить бы надо бы.
Огромное спасибо, Антон, за твои труды. С удовольствием буду применять твои наработки в своих проектах!
Данная библиотека не дружит с русской кодировкой. Точнее форма в примере не пашет. Поправить бы!
Понял проблему. Функция htmlentities работает плохо с русскими символами, может заменить на htmlspecialchars()? Тогда все ок. За библиотеку спасибо, с виду очень хороша.
Здравствуйте!
Пользуюсь Вашей библиотекой (спасибо за неё!) и возник вопрос. Если в конструкции $.php(“/1.php”,{“varry”:args}); в качестве args задать массив, то в скрипт приходит только его последний элемент (в скрипте я его получаю как
$varry = $_POST["varry"];). Можно ли это как-то исправить?
Проверил, вроде все работает как надо, приведите код полностью – возможно траблы не в бибилотеке…
Код JS
function getAjax() { $.php('ajax/getAjax.php',{'varry':arguments}); }Всегда количество равно 1, сколько бы параметров я не передавал.
Очень странно, пробую подобный пример – все работает…
Антон, вот мой код до строчки:
function getAjax() { $.php('ajax/getAjax.php',{'varry':arguments}); } getAjax("первый", "второй", "третий");и php-файл
define("DA_ROOT", "../"); include_once DA_ROOT.'ajax/scripts/jQuery.php'; $varry = $_POST["varry"]; jQuery :: addMessage(count($varry)); jQuery :: getResponse();Попробуйте точно такие файлы создать. Count всегда 1.
У вас опечатка, или функция getAjax не принимает никаких параметров?
PHP части я передаю объект arguments, поскольку не знаю, сколько параметров будет у функции.
Только arguments – не является массивом, приведите его к массиву:
Теперь у вас будет проблема с тем, как jQuery сериализует массив следующим образом:
{foo:["bar1", "bar2"]} == '&foo=bar1&foo=bar2';Но можете сами формировать строку запроса – используя JSON – http://www.json.org/json2.js
Добрый день. Помогите пожалуйста, не могу разобраться в чем причина. Есть код
public function nextpageAction() { jQuery('div#test')->html('Hello'); //output response - requried $this->_helper->getHelper('Jquery')->sendResponse(); }слово Hello отлично срабатывает и выводится, а вот в если написать Привет, русскими буквами. то скрипт не срабатывает вообще.
Какую кодировку используете на странице?
Антон, добрый день, спасибо за статью, пытаюсь выполнить примеры, но ничего не выходит. Все файлы и папки переименовал согласно путям, ошибок php код не выдает, но и ничего не возвращает. Заранее спасибо за помощь.
<? require_once 'library/jQuery.php'; ?> <script type="text/javascript" language="javascript" src="javascript/jquery.js"></script> <script type="text/javascript" language="javascript" src="javascript/jquery.php.js"></script> <div id="test0">Old content</div> <? jQuery('#test0') -> html('new content'); ?>to Mikel
Уважаемый, читайте внимательнее текст в начале статьи “… для генерации AJAX ответа …”! Куда Вы слона тулите?