AJAX на CodeIgniter

Аякс несёт тело погибшего Ахилла. И тут без жертв не обошлось!! Пришло время мне понять наконец, что же такое AJAX и как с ним бороться. Я искал ссылки читал мануалы и факи, но чем больше я узнавал, тем больше я понимал что мало знаю (кто-то это уже говорил?). Сразу признаюсь, что кроме самого общего представления о технологии я в общем то и не имел.

А, наверное, всё из-за того, что я довольно плохо разбираюсь в Javascript. После некоторых поисков я откопал библиотеку xajax и способ использовать её в связке с CodeIgniter. Вообще xajax будто идеально подходит именно для php-программистов, плохо разбирающихся в Javascript.

Это реально просто!

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

Схема действий

Алгоритм очень простой:

  1. В конструкторе контроллера нужно инициировать библиотеку xajax
    $this->load->library('xajax');
  2. Затем там же нужно «зарегистрировать» нашу функцию в xajax
    $this->xajax->registerFunction(
    	array('test_function', // Название функции на Javascript
    		&$this,	 // Какой контроллер владеет этой функцией
    		'test_function'  // Название функции на PHP
            )
    );
    
  3. Запустить обработку процессов
    $this->xajax->processRequest();

    На этом собственно магия закончена. Осталось тупо использовать.

  4. Вызвать на нужное нам событие нашу ajax-функцию
    Наподобие такого:

  5. Создать функцию обработки и назвать её например test_function. Тоже ничего сложного, пример ниже

Пример в сборе

И наконец если всё склеить получится нечто похожее на этот код (кстати рабочий):

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 ''.
		$this->xajax->getJavascript(base_url()).
		''.
		'
'. ''. ''; } }

Вместо послесловия

Как именно в деталях работает xajax я так и не понял. Многое из того что здесь написано — это вуду и магия!

Но, с другой стороны, кто сказал, что нужно детально понимать, чтобы писать приложения? К чёрту! Пожалуй, с меня пока достаточно того, что я разобрался как это делать. В детали буду вникать позже!

Ссылки:

Это мне своеобразное домашнее задание, чтобы не чувствовать себя совсем уж двоешником.

  • Dynamic AJAX — Interactive Website Programming — AJAX: — довольно старый(2005) сайт об AJAX, да к тому же на английском языке, но довольно основательно написано и язык хороший. Даёт хорошее представление об AJAX и о том как оно работает изнутри. Если бы было на русском — мне бы понравилось
  • xajax PHP Class Library — готовая библиотека на php, как раз для таких как я, где за 10 шагов можно запустить AJAX-приложение, так и не поняв принципа. Всё внутре
  • CodeIgniter > Wiki > Xajax perfect setup — дельная инструкция как установить эту библиотеку под CodeIgniter

AJAX на CodeIgniter: 6 комментариев

  1. madbirdy

    У xajax была интересная проблема. Первые два символа из response не отображались. Т.е. на запрос передаю из php строку «12345″, в js после получения делаю alert(response), а он мне «345″…
    После этого не стал с этой библиотекой сотрудничать :)

  2. Altesack

    Попробовал реализовал.
    Ничего похожего не наблюдаю.
    Как я передаю — так и передаётся.

  3. ilya

    а если просто зайти на test_function
    будет ошибка типа не найден параметр у функции.
    как то не красиво.

  4. altesack Автор записи

    @ ilya:
    А как он туда зайдёт?? Прямой ссылки нигде нет.
    С таким же успехом он может зайти и на несуществующий урл и получит 404 ошибку :)

    PS: В принципе можно поставить
    function test_function($number=0)
    Это позволит нам избежать ошибки

  5. Яков

    Хм, я для ajax’a использую jquery, и codeigniter если можно так выразится не знает про jquery :)

Комментарии запрещены.