Любая интегрированная система, реализованная на базе технологии Ajax, сталкивается с проблемой преобразования типов данных языка сценариев, используемого на стороне сервера, в типы данных JavaScript и наоборот. В подкаталоге JPSpan находятся три основных сценария РНР, напрямую связанных с задачей преобразования типов между двумя языками программирования: Serializer. php, Types, php и Un-serializer. php.
Сценарий Serializer. php содержит определение глобального массива с именем _JPSPAN_SERIALIZER_MAP. Этот массив содержит отдельные элементы для каждого из типов РНР, которые могут быть представлены в коде JavaScript. Как вы можете убедиться, в массиве имеются описания всех стандартных типов данных, наряду с такими типами, как null и jpspan_eггог:
$GLOBALS['_JPSPAN_SERIALIZER_MAP'] = а г ray( 'string'=>array(
'class'=>'JPSpan_SerializeriString',
file=>NULL
),
'integer'=>array(
'class'=>'JPSpan_SerializedInteger',
'file'=>NULL - ).
'boolean'=>array(
'class'=>'JPSpan_SerializedBoolean',
file'=>NULL
).
doubie'=>array(
'class'=>'JPSpan_SerializedFloat', file"=>NULL ),
'null'=>array(
'class'=>' JPSpan_Se rializedNull',
'file'=>NULL
),
'array'=>array(
'class'=>'JPSpan_SerializedArray', .'file'=>NULL
),
'object =>array(
'class'=>'JPSpan_SerializedObject',
'file'=>NULL
),
' jpspan_error=>array(
'class'=>'JPSpan_SerializedError', 'file'=>NuLL
),
);
Каждый из типов преобразуется отдельным классом в функцию. Программный код классов может размещаться как в самой странице, так и в виде отдельных сценариев. По умолчанию JPSpan вставляет Б:* определения классов в страницу, поэтому свойство $file определен: как пустая ссылка.
Все классы обладают специальным методом generate(), который возвращает полученные данные в представлении JavaScript. Наприме; при попытке сериализации булева значения true будет получен следующий код JavaScript:
var data_serialized = 'new Function("var tl = true;return tl;");'; var data_func = eval(data_serialized); var data = data_func();
Для преобразования данных из представления JavaScript в РНР используются сценарии Types, php и Unserializer. php.
Сценарий Types, php содержит определения двух базовых типов: JPS:i". Object и JPSpan_Error. (Все объекты JavaScript преобразуются в экземпляры одного из этих двух классов, в то время как класс JPSpan_Erro" свойствами code, name и message, обсуждавшимися в предыдущем разделе, класс JPSpan_Object - это вообще пустой класс, основой для более конкретной реализации.)
Сценарий Unserializer.php для обратного преобразования данных пользует другие два класса, определения которых находятся в unserializer: JPSpan_Unserializer_XML в сценарии XML.php и JPSpar_.serializer_PHP в сценарии РНР. php. По умолчанию используется верен.! XML, если явно не оговаривается обратное.
В представлении JPSpan каждый аргумент, передаваемый методу, определяется элементом документа XML, например, булева величина представляется элементом <Ь>, значение которой определяется атрибутом v:
Значение false было бы передано как v="0".
Полный документ XML, являющийся представлением строки с электронным адресом клиента, передаваемой в виде аргумента методу getAddresFromEmailO, мог бы выглядеть так:
hmqueen412@yahoo.com
Элемент - это корневой элемент документа, а элемент <а> - это массив аргументов вызываемого метода. Первый аргумент, содержащийся в элементе , представляет строку, фактическое значение которой содержится в элементе .