Создаем простой AJAX компонент
В этом примере я продемонстрирую как легко и быстро можно сделать AJAX компнент.
Итак возмем самый простой компонент, можно от сюда.
Открываем файл контроллера (components\com_hello\controller.php) и добавляем в него новую функцию (или task)
function hello()
{
sleep(2); // добавим немного задумчивости, для реализма :)
$id = JRequest::getVar('id');
$model = $this->getModel('myuser');
$myuser = $model->getUser($id);
if ($myuser) {
$html = 'Ваше имя: ' . $myuser->name;
$html .='
Ваш логин: ' . $myuser->username;
$html .='
Ваш email: ' . $myuser->email;
} else {
$html = 'Пользователя с таким ID не существует';
}
echo $html;
}
Здесь как видно идет обращение к модели, которой пока еще нет. Сейчас как раз и создадим ее. Итак создаем файл com_hello\models\myuser.php следующего содержания:
Дальше создадим новый файл скрипта components\com_hello\js\hello.js, следующего содержания:
function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
// javascript-код голосования из примера
function ajaxfunction() {
// (1) создать объект для запроса к серверу
var req = getXmlHttp()
// (2)
// span рядом с кнопкой
// в нем будем отображать ход выполнения
var statusElem = document.getElementById('status');
var id = document.getElementById('userid').value;
req.onreadystatechange = function() {
// onreadystatechange активируется при получении ответа сервера
if (req.readyState == 4) {
// если запрос закончил выполняться
statusElem.innerHTML = req.statusText // показать статус (Not Found, ОК..)
if(req.status == 200) {
// если статус 200 (ОК) - выдать ответ пользователю
var newElement = document.createElement('div')
newElement.innerHTML = req.responseText
statusElem.appendChild(newElement)
}
// тут можно добавить else с обработкой ошибок запроса
}
}
// (3) задать адрес подключения
req.open('GET', 'index.php?option=com_hello&task=hello&format=raw&id='+id, true);
// объект запроса подготовлен: указан адрес и создана функция onreadystatechange
// для обработки ответа сервера
// (4)
req.send(null); // отослать запрос
// (5)
statusElem.innerHTML = 'Ожидаю ответа сервера...'
}
Здесь стоит обратить внимание на ссылку, в ней присутствует параметр format=raw. Это означает, что она вернет нам не весь документ, а только ту часть которую возвращает компонент. Про все остальное рассказывать не буду, лучше почитать соответствующую литерату.
Теперь нам нужно подключит этот скриптт. Добавим в вид com_hello\views\hello\view.html.php
$document = &JFactory::getDocument();
$baseurl = JURI::base();
$document->addScript($baseurl . "components/com_hello/js/hello.js");
Так же можно использовать вместо путей константы Joomla, я выбрал такой вариант.
Ну и последнее, добавлеяем в шаблон нужные элементы com_hello\views\hello\tmpl\default.php добавляем
Как видно из шаблона кликая на ссылку вызывается функция ajaxfunction(), которая была описана в файле hello.js
Ну вот и все результатом работы данного компонента будет вывод информоции о пользоателе по его ID, с помощью AJAX.
23
Комментарии
16.04.2010 11:19
24.06.2010 12:57
404 - Возникла ошибка
Component Not Found
08.07.2010 17:00
12.09.2010 23:13
05.10.2010 16:17
02.03.2011 15:35
req.open('GET', 'index2.php?option=com_seanceorder&controller=order&task=ajax_order&id='+id, true);
Господа не ленитесь помогайте людям и людям помогут вам, если бы кто-то написал это раньше мне бы не пришлось тратить несколько часов на поиск решения, но я сохраню эти часы другим людям.
02.03.2011 15:35
01.04.2011 15:35
09.06.2011 00:52
05.08.2011 18:01
строка req.open('GET', 'index.php?option=com_demoajax&task=hello&format=row&id='+id, true);
формат данных RAW, а не ROW!!!
2 В тексте отсутствует содержимое модели myuser.php
За информацию спасибо!
04.10.2011 12:47
Автор, ну оформите по человечески статью. Я новичок и на выявление ошибок уходит очень много времени.
Хотябы исходники то должны работать! Хрен с ним с листингом!
11.10.2011 00:00
С помощью выявления ошибок некоторые люди как раз и учатся. Если ничего не делать и не пробовать, то толку от этого не будет.
На момент написания статьи все проверялось и работало, иначе бы не выкладывалось.
11.10.2011 20:24
Сделал на основе Вашего компонента свой. Спасибо!
29.11.2011 12:03
В файле hello.js вместо - Ожидаю ответа сервера... - вставил . Картинку загрузчика можно сформировать здесь ajaxload.info
Мешало ОК после отработки скрипта. Вставил statusElem.innerHTML = null в условие if(req.status == 200) {
Может есть другой вариант?
29.11.2011 12:05
- вставил img src="/images/stories/ajax-loader.gif"
13.04.2012 01:49
10.10.2013 15:14
Где содержание то >
02.07.2014 13:31
RSS лента комментариев этой записи