Joomla 1.5: Использование Ajax - Обработка на стороне сервера.

Joomla 1.5: Использование Ajax - Обработка на стороне сервера.

Индекс материала
Joomla 1.5: Использование Ajax
Обработка на стороне сервера.
Обработка на стороне клиента.
Обходим политику единого источника
Все страницы

Обработка Ajax - запросов на стороне сервера.

Серверная часть вашей реализации Ajax может быть уже каким - либо готовым веб-сервисом, в этом случае она уже написана за вас. Но, что делать, если вам нужно написать код сервера самостоятельно, то имеет смысл взять за основу Framework Joomla. Хотя можно реализовать серверную сторону и без Joomla, но в таком случае вам будет не хватать целого ряда важных функций, которые делают написание безопасного серверного Ajax - кода очень простым. ( Это, блин, не моё - это перевод!)

Как правило ответ сервера является XML или JSON - форматом. В Joomla 1.5 которая поддерживает MVC это делается особенно легко, сука, и не принуждённо...Просто добавьте новый класс "вида" в директорию view, в файл с именем view.xml.php, или view.json.php в зависимости от требуемого формата. Иногда ответ, необходимый для конкретного запроса настолько прост, что создание нового представления было бы излишним. В этом случае нет никакой необходимости создавать файл и класс "вида" - всё можно запхать в контроллер.

Генерация JSON ответа

PHP имеет встроенные функции для кодирования и декодирования JSON данных. Вы можете кодировать данные, используя json_encode функции, например:

<?php
// Получаем данные для ответа:
$data = array( 'some data' );
 
// Отсылаем "клиенту" данные в JSON - формате:
echo json_encode( $data );

Функция Json_encode может кодировать почти все типы данных, такие как строки, массивы и объекты, хотя, нужно иметь в виду, что json_decode функция будет возвращать только объект (и, возможно, ассоциативный массив). Это есть - правильно! Тем более, что при таком раскладе удобно устанавливать правильный MIME-тип для ответа. В некоторых приложениях Вы могли бы также изменить предложенное имя файла на что-то другое чем "index.php", который Вы, вероятно, получите по умолчанию. В следующем примере предложенное имя файла изменено на имя представления с добавленным расширением ".json".

<?php
// Получаем данные для ответа:
$data = array( 'some data' );
 
// Получаем document объект.
$document =& JFactory::getDocument();
 
// Устанавливаем MIME тип для JSON ответа.
$document->setMimeEncoding( 'application/json' );
 
// Подменяем имя файла.
JResponse::setHeader( 'Content-Disposition', 'attachment; filename="'.$view->getName().'.json"' );
 
// Отсылаем "клиенту" данные в JSON - формате:
echo json_encode( $data );

Генерация XML ответа

Joomla поддерживает простой и достаточно эффективный класс, JSimpleXML , который может быть использован для создания XML-вывода, например, для Ajax. Однако, объектно-ориентированный XML генератор хренОв тем, что он медленный и жрётъ память, хоть JSimpleXML и представляет собой облегченную реализацию. Например, следующий код прекрасно обходится и без JSimpleXML и будет выводить XML-документ, состоящий из корневого элемента, <root> содержащего элементы <items> , которые сами содержат один или несколько элементов <item> с данными:

<?php
$document =& JFactory::getDocument();
$document->setMimeEncoding( 'text/xml' );
 
// Выводим XML декларацию.
echo '<?xml version="1.0" encoding="UTF-8" ?>' . "\n";
 
// Выводим корневой - root элемент.
echo '<root>' . "\n";
 
// Выводим данные.
echo "\t" . '<items>' . "\n";
if (!empty( $data )) {
	foreach ($data as $datum) {
		echo "\t\t" . '<item>' . "\n";
		foreach ($datum as $key => $value) {
			echo "\t\t\t" . '<' . $key . '>' . htmlspecialchars( $value ) . '</' . $key . '>' . "\n";
				}
		echo "\t\t" . '</item>' . "\n";
	}
}
echo "\t" . '</items>' . "\n";
 
// Закрываем корневой - root элемент.
echo '</root>' . "\n";

Обратите внимание, что данные должны быть экранированы с помощью htmlspecialchars, чтобы обезопасить HTML символы. Также, в этом примере была предпринята попытка привести "вид для печати" в божеский вид путём применения табов и возвратов каретки. Это не является обязательным, и эти дополнительные символы могут быть удалены.



Добавить комментарий


Защитный код
Обновить



Кто на сайте
Сейчас 104 гостей онлайн