PHP библиотека для jQuery

Categories: JavaScript, PHP

jQuery-PHP

С тех пор как сочетание “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.

Другие посты на эту тему

30 Responses to “PHP библиотека для jQuery”

  1. Sam

    А какой смысл генерировать таким образом JS-код? Может лучше его сразу на JS и писать?

  2. А потом делать eval?
    Типа:

    $script[] = '$("#asd").html("content");';
    echo json_encode($script);
    

    И в JS делать eval для каждого вхождения?

    Или Вы имеете ввиду делать по старинке? Послали запрос и js функцией обработали ответ?
    – Так смысл данной библиотеки как раз в том, чтобы не надо было писать js функций, только PHP…

  3. А мне библиотека понравилась.
    Скажу прямо – я ещё её не использовал ни в одном проекте, но попробую обязательно.
    Единственное, что меня смущает – смена дизайна.
    Хорошо, если дизайнер обучающийся и в состоянии понять что и где. Мой – до сих пор присылает мне нарезанные макеты в виде php+inc файлы.
    И 20% времени уходит на то, чтобы понять, что же он имел ввиду.

  4. Активно пользую jquery почти во всех проектах.
    Пока не очень понимаю как связать php и jquery (

  5. Интересно, надо будет попробовать библиотеку…

  6. [...] Может кому пригодиться еще библиотека для PHP: http://anton.shevchuk.name/php/php-library-for-jquery/ Tags: JavaScript, jquery | March 3rd, 2008 | 2 [...]

  7. Zoom

    Походу такой подход может оказаться удобным, но в некоторых случаях есть существенный недостаток. Зависимость от PHP и соответственно от сервера. Так в целом идея неплохая!

  8. [...] я уже писал о библиотеке jQuery-PHP, и вот совсем недавно обнаружил, [...]

  9. Dmitry

    не использовал jquery, на мой взгляд mootools имеет на много больше возможностей, хотя возможно и ошибаюсь.

  10. Dals

    @Dmitry
    Дело вкуса и привычки :)
    Кому-то больше нравится Prototype, кому-то jQuery. Вам – Mootools.

  11. [...] Для организации работы с PHP использую бибилотеку jQuery-PHP, удобно если Вам нравится jQuery ;), подробней читаем в статье PHP библиотека для jQuery [...]

  12. [...] Для организации работы с PHP использую бибилотеку jQuery-PHP, удобно если Вам нравится jQuery ;), подробней читаем в статье PHP библиотека для jQuery [...]

  13. Yura

    за весь день перелопатил в инете кучу инфы по jquery. так и не смог найти ни одного примера как из select (формируется посредством php) не перегружая форму (все примеры приведенные в инете требуют нажатия кнопки submit) получить новое значение (ну к примеру для использования в следующем select).

  14. Антошко

    Хм… прикольно, в форме глюк.
    Тыкаю кнопку HTML или JS или CSS, а слэш ставится в кнопке php.
    Поправить бы надо бы.

  15. Огромное спасибо, Антон, за твои труды. С удовольствием буду применять твои наработки в своих проектах!

  16. Данная библиотека не дружит с русской кодировкой. Точнее форма в примере не пашет. Поправить бы!

  17. Понял проблему. Функция htmlentities работает плохо с русскими символами, может заменить на htmlspecialchars()? Тогда все ок. За библиотеку спасибо, с виду очень хороша.

  18. barcelona

    Здравствуйте!
    Пользуюсь Вашей библиотекой (спасибо за неё!) и возник вопрос. Если в конструкции $.php(“/1.php”,{“varry”:args}); в качестве args задать массив, то в скрипт приходит только его последний элемент (в скрипте я его получаю как
    $varry = $_POST["varry"];). Можно ли это как-то исправить?

    • Проверил, вроде все работает как надо, приведите код полностью – возможно траблы не в бибилотеке…

  19. barcelona

    Код JS

      function getAjax() {
        $.php('ajax/getAjax.php',{'varry':arguments});
      }
    
  20. barcelona
      include_once 'ajax/scripts/jQuery.php';
      $varry = $_POST["varry"];
      jQuery :: addMessage(count($varry));
      jQuery :: getResponse();
    

    Всегда количество равно 1, сколько бы параметров я не передавал.

  21. barcelona

    Антон, вот мой код до строчки:

    
    	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.

  22. barcelona

    PHP части я передаю объект arguments, поскольку не знаю, сколько параметров будет у функции.

    • Только arguments – не является массивом, приведите его к массиву:

      var args = Array.prototype.slice.call(arguments);
      

      Теперь у вас будет проблема с тем, как jQuery сериализует массив следующим образом:

      {foo:["bar1", "bar2"]} == '&foo=bar1&foo=bar2';
      

      Но можете сами формировать строку запроса – используя JSON – http://www.json.org/json2.js

  23. Dominos

    Добрый день. Помогите пожалуйста, не могу разобраться в чем причина. Есть код

       public function nextpageAction()
       {
            jQuery('div#test')->html('Hello');
            //output response - requried
            $this->_helper->getHelper('Jquery')->sendResponse();
       }
    

    слово Hello отлично срабатывает и выводится, а вот в если написать Привет, русскими буквами. то скрипт не срабатывает вообще.

  24. Mikel

    Антон, добрый день, спасибо за статью, пытаюсь выполнить примеры, но ничего не выходит. Все файлы и папки переименовал согласно путям, ошибок 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');
    ?>
    
  25. Анатолий

    to Mikel

    Уважаемый, читайте внимательнее текст в начале статьи “… для генерации AJAX ответа …”! Куда Вы слона тулите?

Leave a Reply

Copyright © 2007-2010, Anton Shevchuk. Powered by WordPress

MAXCACHE: 0.25MB/0.00036 sec