Некоторые решения, основанные на технологии AJAX, при правильной реализации могут производить сильное впечатление, но не будем забывать, что некоторые проверенные элементы, такие как формы HTML, еще совсем не устарели и попрежнему играют важную роль во многих современных решениях, как с применением технологии AJAX, так и без нее. Библиотека Base предоставляет три функции преобразования форм:
dojo.formToObject(/*DOMNode||String*/ formNode) //Возвращает Object
dojo.formToQuery(/*DOMNode||String*/ formNode) //Возвращает String
dojo.formToJson(/*DOMNode||String*/ formNode) //Возвращает String
Чтобы продемонстрировать действие каждой из этих функций, предположим, что у нас имеется следующая форма:
<form id="register">
<input type="text" name="first" value="Foo">
<input type="button" name="middle" value="Baz" disabled>
<input type="text" name="last" value="Bar">
<select type="select" multiple name="favorites" size="5">
<option value="red">red</option>
<option value="green" selected>green</option>
<option value="blue" selected>blue</option>
</select>
</form>
Ниже приводятся результаты вызова каждой функции. Обратите внимание, что неактивные элементы формы были пропущены при преобразовании:
Функция formToObject вернула:
{
first: "Foo",
last : "Bar",
favorites: [
"green",
"blue"
]
};
Функция formToQuery вернула:
"first=Foo&last=Bar&favorites=green&favorites=blue"
Функция formToJson вернула:
'{"first": "Foo", "last": "Bar", "favorites": ["green", "blue"]}'
Библиотека Base предоставляет следующие вспомогательные функции, позволяющие выполнять преобразование строки запроса в объект и обратно. Они достаточно просты в применении, но не забывайте, что значения в строке запроса преобразуются в строки, даже если они фактически являются числами:
dojo.queryToObject(/*String*/ str) //Возвращает Object
dojo.objectToQuery(/*Object*/ map) //Возвращает String
Ниже приводится короткий фрагмент, иллюстрирующий применение этих функций:
//вернет объект {foo : "1", bar : "2", baz : "3"}
var o = dojo.queryToObject("foo=1&bar=2&baz=3");
//преобразует объект обратно в строку "foo=1&bar=2&baz=3"
dojo.objectToQuery(o);