Пришло время мне понять наконец, что же такое AJAX и как с ним бороться. Я искал ссылки читал мануалы и факи, но чем больше я узнавал, тем больше я понимал что мало знаю (кто-то это уже говорил?). Сразу признаюсь, что кроме самого общего представления о технологии я в общем то и не имел.
А, наверное, всё из-за того, что я довольно плохо разбираюсь в Javascript. После некоторых поисков я откопал библиотеку xajax и способ использовать её в связке с CodeIgniter. Вообще xajax будто идеально подходит именно для php-программистов, плохо разбирающихся в Javascript.
Это реально просто!
Я попытаюсь показать пример приложения. Для демонстрации достаточно одного контроллера testxajax. Пример, как всегда, подсмотренный исправленный и творчески переработанный.
Схема действий
Алгоритм очень простой:
- В конструкторе контроллера нужно инициировать библиотеку xajax
$this->load->library('xajax');
- Затем там же нужно “зарегистрировать” нашу функцию в xajax
$this->xajax->registerFunction( array('test_function', // Название функции на Javascript &$this, // Какой контроллер владеет этой функцией 'test_function' // Название функции на PHP ) );
- Запустить обработку процессов
1
$this->xajax->processRequest();
На этом собственно магия закончена. Осталось тупо использовать.
- Вызвать на нужное нам событие нашу ajax-функцию
Наподобие такого:1
<input type="button" value="test" onclick="xajax_test_function(2);">
- Создать функцию обработки и назвать её например test_function. Тоже ничего сложного, пример ниже
Пример в сборе
И наконец если всё склеить получится нечто похожее на этот код (кстати рабочий):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <?php class Testxajax extends Controller { function Testxajax() { parent::controller(); $this->load->helper('url'); $this->load->library('xajax'); $this->xajax->registerFunction(array('test_function',&$this,'test_function')); $this->xajax->processRequest(); } function test_function($number) { $objResponse = new xajaxResponse(); $objResponse->Assign("SomeElementId", "innerHTML", "Xajax работает!!! Получен параметр: ".$number); return $objResponse; } function index() { echo '<html><head>'. $this->xajax->getJavascript(base_url()). '</head><body>'. '<div id="SomeElementId"></div>'. '<input type="button" value="test" onclick="xajax_test_function(2);">'. '</body></html>'; } } |
Вместо послесловия
Как именно в деталях работает xajax я так и не понял. Многое из того что здесь написано – это вуду и магия!
Но, с другой стороны, кто сказал, что нужно детально понимать, чтобы писать приложения? К чёрту! Пожалуй, с меня пока достаточно того, что я разобрался как это делать. В детали буду вникать позже!
Ссылки:
Это мне своеобразное домашнее задание, чтобы не чувствовать себя совсем уж двоешником.
- – довольно старый(2005) сайт об AJAX, да к тому же на английском языке, но довольно основательно написано и язык хороший. Даёт хорошее представление об AJAX и о том как оно работает изнутри. Если бы было на русском – мне бы понравилось
- – готовая библиотека на php, как раз для таких как я, где за 10 шагов можно запустить AJAX-приложение, так и не поняв принципа. Всё внутре
- – дельная инструкция как установить эту библиотеку под CodeIgniter
Посты по теме:
RSS-подписка
У xajax была интересная проблема. Первые два символа из response не отображались. Т.е. на запрос передаю из php строку “12345″, в js после получения делаю alert(response), а он мне “345″…
После этого не стал с этой библиотекой сотрудничать
Попробовал реализовал.
Ничего похожего не наблюдаю.
Как я передаю – так и передаётся.
Хм… значит пофиксили
а если просто зайти на test_function
будет ошибка типа не найден параметр у функции.
как то не красиво.
@ ilya:
А как он туда зайдёт?? Прямой ссылки нигде нет.
С таким же успехом он может зайти и на несуществующий урл и получит 404 ошибку
PS: В принципе можно поставить
function test_function($number=0)
Это позволит нам избежать ошибки
Хм, я для ajax’a использую jquery, и codeigniter если можно так выразится не знает про jquery