С тех пор как сочетание “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. Будет не совсем честно. если я скажу что писал данную библиотеку самолично, в написании её мне помогали два человека: Дмитрий Чиркин и Владимир Котушенко (точнее они начинали, а я взял молоток и зубило и все переделал заново)…
А какой смысл генерировать таким образом JS-код? Может лучше его сразу на JS и писать?
А потом делать eval?
Типа:
И в JS делать eval для каждого вхождения?
Или Вы имеете ввиду делать по старинке? Послали запрос и js функцией обработали ответ?
– Так смысл данной библиотеки как раз в том, чтобы не надо было писать js функций, только PHP…
А мне библиотека понравилась.
Скажу прямо – я ещё её не использовал ни в одном проекте, но попробую обязательно.
Единственное, что меня смущает – смена дизайна.
Хорошо, если дизайнер обучающийся и в состоянии понять что и где. Мой – до сих пор присылает мне нарезанные макеты в виде php+inc файлы.
И 20% времени уходит на то, чтобы понять, что же он имел ввиду.
Активно пользую jquery почти во всех проектах.
Пока не очень понимаю как связать php и jquery (
Интересно, надо будет попробовать библиотеку…
Походу такой подход может оказаться удобным, но в некоторых случаях есть существенный недостаток. Зависимость от PHP и соответственно от сервера. Так в целом идея неплохая!
не использовал jquery, на мой взгляд mootools имеет на много больше возможностей, хотя возможно и ошибаюсь.
@Dmitry
Дело вкуса и привычки :)
Кому-то больше нравится Prototype, кому-то jQuery. Вам – Mootools.
за весь день перелопатил в инете кучу инфы по jquery. так и не смог найти ни одного примера как из select (формируется посредством php) не перегружая форму (все примеры приведенные в инете требуют нажатия кнопки submit) получить новое значение (ну к примеру для использования в следующем select).
Хм… прикольно, в форме глюк.
Тыкаю кнопку HTML или JS или CSS, а слэш ставится в кнопке php.
Поправить бы надо бы.
Огромное спасибо, Антон, за твои труды. С удовольствием буду применять твои наработки в своих проектах!
Данная библиотека не дружит с русской кодировкой. Точнее форма в примере не пашет. Поправить бы!
Понял проблему. Функция htmlentities работает плохо с русскими символами, может заменить на htmlspecialchars()? Тогда все ок. За библиотеку спасибо, с виду очень хороша.
Здравствуйте!
Пользуюсь Вашей библиотекой (спасибо за неё!) и возник вопрос. Если в конструкции $.php(“/1.php”,{“varry”:args}); в качестве args задать массив, то в скрипт приходит только его последний элемент (в скрипте я его получаю как
$varry = $_POST[“varry”];). Можно ли это как-то исправить?
Проверил, вроде все работает как надо, приведите код полностью – возможно траблы не в бибилотеке…
Код JS
Всегда количество равно 1, сколько бы параметров я не передавал.
Очень странно, пробую подобный пример – все работает…
Антон, вот мой код до строчки:
и php-файл
Попробуйте точно такие файлы создать. Count всегда 1.
У вас опечатка, или функция getAjax не принимает никаких параметров?
PHP части я передаю объект arguments, поскольку не знаю, сколько параметров будет у функции.
Только arguments – не является массивом, приведите его к массиву:
Теперь у вас будет проблема с тем, как jQuery сериализует массив следующим образом:
Но можете сами формировать строку запроса – используя JSON – http://www.json.org/json2.js
Добрый день. Помогите пожалуйста, не могу разобраться в чем причина. Есть код
слово Hello отлично срабатывает и выводится, а вот в если написать Привет, русскими буквами. то скрипт не срабатывает вообще.
Какую кодировку используете на странице?
У меня такая же проблема. кодировку и пользую Windows-1251.
Антон, добрый день, спасибо за статью, пытаюсь выполнить примеры, но ничего не выходит. Все файлы и папки переименовал согласно путям, ошибок php код не выдает, но и ничего не возвращает. Заранее спасибо за помощь.
to Mikel
Уважаемый, читайте внимательнее текст в начале статьи “… для генерации AJAX ответа …”! Куда Вы слона тулите?
По-моему не нужно смешивать совершенно разные вещи в одну кучу, Jquery – как JavaScript’овая API вполне полноценна и реализует крупные задачи по клиентской части, в то время как PHP занимается серверными процессами. Если исходить из принципа инкапсуляции, то интеграция JS и тем более JQuery в PHP, его нарушает. Это конечно моё мнение, но мне надоело смотреть на это “мясо” из PHP+HTML, а если в PHP ещё вставлять Javascript – ну чтож, поздравляю обфускация succeeded.
Дурацкая библиотека, совершенно не понимаю её назначения! скажем у меня есть клиент на html+js, обменивающийся с сервером на php данными в json формате. Вот и объясните, нахрена мне в php вообще использовать какие-то html-выборки? это очень абсурдно! клиент должен выполнять роль клиента, а сервер роль сервера!
для MVC модели такая библиотека очень вредна… придется писать отображение в коде контроллера, для поддержки будет логичнее и проще делать, как вы написали в первом посте “делать по старинке? Послали запрос и js функцией обработали ответ?” по краинеи мере сразу видно что было до и что должно случится после запроса…
единственное применение этой библиотеки вижу, только если логика составления этих функций-ответов очень сложна, и зависит от множества условий, а не проста и линеина как у вас…. в этом случае сервер из раза в раз генерирует один и тот же код…
задумка автора ясна, в небольших проектах может еще и прокатит… для таких целей как в примере наверно только и поидет, сложно придумать стоящий пример для такого “чуда”. и по примеру – чем css стили менять вручную, логичнее менять класс, тогда и с отображением проблем меньше будет… дизаинер сможет его и сам прописать в .css файлах да и поддерживать будет проще… но опять же если ответ с именем класса приходит с сервера, а не прописан в callback функции, то чтобы узнать какие классы понадобятся дизаинеру, ему(или еще кому то) нужно будет смотеть в php код…
в общем присоединяюсь к последним двум постам…
это для маленьких проектов выполняемых исключительно одним человеком, и для сайтов не требующих подержки и развития.
На локальном серваке работает отлично, как только выгрузил на хостинг firebug выдает response is null. Сделано всё как говориться в статье. В чем дело может быть?
у хостера json не был включен
Нахуя?!Зачем? Приведите три весомых примера, когда эти три php-класса помогут разработчикам жить.Из описания вообще не ясно что делает код и в каком контексте используется, что возвращает…
Вот если бы вы написали библиотеку, которая позволит оперировать с html-строкой аналогичным jQuery синтаксисом, будет радость…
Например
<?php
$before = 'My contentMore content’;
jQuery( $before )->addClass(‘wrap’);
$after = jQuery( ‘span:first’, $before )->addClass(‘first’)->css(array(‘background:#fff’));
echo $after; // My contentMore content
На JS очень даже просто на лету генерировать и исполнять код. Кому интересно, можете пообщаться со мной, написав об этом на ganinaleksei@rambler.ru ;)
Одного не могу понять. Неужели отменили консепцию MVC? По моемуб JS код – это часть шаблона (фронтэнд), а не бэкэнда. Потому JS код нужно писать в шаблонах, а не генерировать его на стороне сервера.
Подскажите пожалуйста, с помощью каких тегов можно изменить вид одной ссылки (например фон), при наведении на другую ссылку курсора мыши? Я нашла такой тег jquery
$(document).ready(function() {
$(“#mylink1”).mouseover(function(){
$(“#mylink2”).hide();
}).mouseout(function(){
$(“#mylink2”).show();
Только мне не надо что бы при наведении на одну ссылку исчезала другая. Мне надо, что бы при наведении на 1-ю ссылку мыши, у 2-й ссылки всплыло фото. А при наведении мыши на 2-ю ссылку, у 1-й ссылки поменялся цвет.