<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.extjs.com/learn/w/skins/common/feed.css?207"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Learn About the Ext JavaScript Library  - Recent changes [en]</title>
		<link>http://www.extjs.com/learn/Special:RecentChanges</link>
		<description>Track the most recent changes to the wiki in this feed.</description>
		<language>en</language>
		<generator>MediaWiki 1.15.0</generator>
		<lastBuildDate>Fri, 20 Nov 2009 05:58:59 GMT</lastBuildDate>
		<item>
			<title>Manual:Core:Working with JSON ru</title>
			<link>http://www.extjs.com/learn/w/index.php?title=Manual:Core:Working_with_JSON_ru&amp;diff=7580&amp;oldid=prev</link>
			<description>&lt;p&gt;Created page with &amp;#39;{{tutorial |summary=Working with JSON |author=[http://patspam.com Patrick Donelan] |published=2007-09-25 |languages={{Tutorial_Translation|language=English|country_code=en|url=Ma…&amp;#39;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{tutorial&lt;br /&gt;
|summary=Working with JSON&lt;br /&gt;
|author=[http://patspam.com Patrick Donelan]&lt;br /&gt;
|published=2007-09-25&lt;br /&gt;
|languages={{Tutorial_Translation|language=English|country_code=en|url=Manual:Core:Working_with_JSON}} {{Tutorial_Translation|language=Chinese|country_code=cn|url=Manual:Core:Working_with_JSON_%28Chinese%29}} {{Tutorial_Translation|language=Korean|country_code=kr|url=Manual:Core:Working_with_JSON_%28Korean%29}}&lt;br /&gt;
{{Tutorial_Translation|language=Russian|country_code=ru|url=Manual:Core:Working_with_JSON}} &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Работа с JSON =&lt;br /&gt;
Допустим, вы имеете javascript-объект, который выглядит так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var obj = {&lt;br /&gt;
	prop1: &amp;quot;a0~`!@#$%^&amp;amp;*()-_+={}[]|\\:;\&amp;quot;',.?/&amp;quot;,&lt;br /&gt;
	prop2: ['x','y'],&lt;br /&gt;
	prop3: {&lt;br /&gt;
		nestedProp1: 'abc', &lt;br /&gt;
		nestedProp2: 456&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Эта статья обсуждает то, как вы можете перевести ваш объект в JSON и отправить его на ваш сервер.&lt;br /&gt;
&lt;br /&gt;
== URL-кодирование с помощью Ext.urlEncode ==&lt;br /&gt;
Первый метод, на который мы желаем обратить внимание - это Ext.urlEncode (и его декодирующий партнер Ext.urlDecode). &lt;br /&gt;
Ext.urlEncode() в действительности не работает с JSON вообще, все что она делает - это конвертация простого объекта в набор пар имя/значение, подходящих для использования в HTTP GET или POST-запросах. Я говорю здесь простой объект, потому что urlEncode смотрит только на свойства первого уровня - массивы разрешены,но вложенные объекты будет проигнорированны. &lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Ext.urlEncode(obj) == &amp;quot;prop1=a0~%60!%40%23%24%25%5E%26*()-_%2B%3D%7B%7D%5B%5D%7C%5C%3A%3B%22'%2C.%3F%2F&amp;amp;prop2=x&amp;amp;prop2=y&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Помните, что prop3 игнорируется&lt;br /&gt;
* Помните, что все специальные символы кодируются(urlEncode() использует внутри encodeURIComponent())&lt;br /&gt;
&lt;br /&gt;
Это удобно для разработки запросов, потому что вы можете указывать параметры как естественный javascript-объект и затем делать urlEncode перед самой отправкой.&lt;br /&gt;
&lt;br /&gt;
Например, вы можете прикреплять эту строку в конец url как к GET-запросу:&lt;br /&gt;
* Запрос отправится на адрес:&lt;br /&gt;
 http://myurl.com?prop1=a0~%60!%40%23%24%25%5E%26*()-_%2B%3D%7B%7D%5B%5D%7C%5C%3A%3B%22'%2C.%3F%2F&amp;amp;prop2=x&amp;amp;prop2=y&lt;br /&gt;
* И сервер прозрачно декодирует URIComponent-кодирование для выдачи вам:&lt;br /&gt;
 prop1	a0~`!@#$%^&amp;amp;*()-_+={}[]|\:;&amp;quot;',.?/&lt;br /&gt;
 prop2	x&lt;br /&gt;
 prop2	y&lt;br /&gt;
&lt;br /&gt;
Или вы можете отправить строку, как содержимое POST-запроса:&lt;br /&gt;
* Запрос отправится на адрес:&lt;br /&gt;
 http://myurl.com&lt;br /&gt;
* С телом POST:&lt;br /&gt;
 prop1=a0~%60!%40%23%24%25%5E%26*()-_%2B%3D%7B%7D%5B%5D%7C%5C%3A%3B%22'%2C.%3F%2F&amp;amp;prop2=x&amp;amp;prop2=y&lt;br /&gt;
* И сервер увидит такие же данные, как и в GET-запросе&lt;br /&gt;
&lt;br /&gt;
Это все отлично и хорошо, но то, почему вы сюда пришли - это посмотреть, как отправлять и получать JSON. Чтобы узнать как - читайте дальше!&lt;br /&gt;
&lt;br /&gt;
== Кодирование JSON с помощью Ext.encode ==&lt;br /&gt;
Ext.encode() (и ее декодирующий эквивалент Ext.decode) конвертирует составной объект в строку JSON&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Ext.encode(obj) == '{&amp;quot;prop1&amp;quot;:&amp;quot;a0~`!@#$%^&amp;amp;*()-_+={}[]|\\:;\&amp;quot;\',.?/&amp;quot;,&amp;quot;prop2&amp;quot;:[&amp;quot;x&amp;quot;,&amp;quot;y&amp;quot;],&amp;quot;prop3&amp;quot;:{&amp;quot;nestedProp1&amp;quot;:&amp;quot;abc&amp;quot;,&amp;quot;nestedProp2&amp;quot;:456}}'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Помните, что вложенные свойства теперь включены&lt;br /&gt;
&lt;br /&gt;
В отличии от рассмотренного выше, когда мы конвертировали простой объект в серию пар имя/значение, ваш объект теперь сконвертирован в один параметр. Идея заключается в том, что теперь вы посылаете его как часть пары имя/значение и позволяете серверу декодировать JSON. Если вы посылаете только JSON-строку, то, возможно, вы назовете ваш параметр ''json''.&lt;br /&gt;
&lt;br /&gt;
Для превращения вашего JSON в пару имя/значение, подходящую для GET/POST-запросов, вы можете кодировать его самостоятельно:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
encodeURIComponent(Ext.encode(obj)) == &amp;quot;%7B%22prop1%22%3A%22a0~%60!%40%23%24%25%5E%26*()-_%2B%3D%7B%7D%5B%5D%7C%5C%5C%3A%3B%5C%22'%2C.%3F%2F%22%2C%22prop2%22%3A%5B%22x%22%2C%22y%22%5D%2C%22prop3%22%3A%7B%22nestedProp1%22%3A%22abc%22%2C%22nestedProp2%22%3A456%7D%7D&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
И создать GET-запрос так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;http://url.com?json=&amp;quot; + encodeURIComponent(Ext.encode(obj))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Или использовать тело POST-запроса:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;json=&amp;quot; + encodeURIComponent(Ext.encode(obj))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Или еще лучше - вы можете использовать нашего друга urlEncode():&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Ext.urlEncode({ json: Ext.encode(obj)}) == &amp;quot;json=%7B%22prop1%22%3A%22a0~%60!%40%23%24%25%5E%26*()-_%2B%3D%7B%7D%5B%5D%7C%5C%5C%3A%3B%5C%22'%2C.%3F%2F%22%2C%22prop2%22%3A%5B%22x%22%2C%22y%22%5D%2C%22prop3%22%3A%7B%22nestedProp1%22%3A%22abc%22%2C%22nestedProp2%22%3A456%7D%7D&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используйте это в GET/POST-запросах, как показано выше. В любом случае, сервер прозрачно декодирует параметры, вернув вам строку:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;prop1&amp;quot;:&amp;quot;a0~`!@#$%^&amp;amp;*()-_+={}[]|\\:;\&amp;quot;',.?/&amp;quot;,&amp;quot;prop2&amp;quot;:[&amp;quot;x&amp;quot;,&amp;quot;y&amp;quot;],&amp;quot;prop3&amp;quot;:{&amp;quot;nestedProp1&amp;quot;:&amp;quot;abc&amp;quot;,&amp;quot;nestedProp2&amp;quot;:456}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Которую вы можете затем JSON-декодировать для доступа к данным.&lt;br /&gt;
&lt;br /&gt;
== Отправка JSON с помощью Ext.Ajax.request ==&lt;br /&gt;
Начиная с Ext 1.1, вы можете легко создавать ручные запросы в стиле Ajax, используя Ext.Ajax.request(). Этот метод принимает конфигурационный объект среди прочих, позволяя вам определить параметры для использования в запросе:&lt;br /&gt;
 params {Object/String/Function} (Необязательное) Объект, содержащий свойства, которые будут использоваться как параметры запроса, url-кодированная строка, или функция обратного вызова для получения параметров.&lt;br /&gt;
&lt;br /&gt;
Если вы передаете объект, Ext.Ajax.request вызывает Ext.urlEncode() для превращения его в серию пар имя/значение(как обычно пропуская вложенные объекты). &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var req = Ext.Ajax.request({&lt;br /&gt;
    url: &amp;quot;/ws/search.pl&amp;quot;,&lt;br /&gt;
    params: obj,&lt;br /&gt;
    method: 'GET',&lt;br /&gt;
    disableCaching: false&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Запрос отправляется на:&lt;br /&gt;
 /ws/search.pl?prop1=a0~%60!%40%23%24%25%5E%26*()-_%2B%3D%7B%7D%5B%5D%7C%5C%3A%3B%22'%2C.%3F%2F&amp;amp;prop2=x&amp;amp;prop2=y&lt;br /&gt;
И сервер видит:&lt;br /&gt;
 prop1	a0~`!@#$%^&amp;amp;*()-_+={}[]|\:;&amp;quot;',.?/&lt;br /&gt;
 prop2	x&lt;br /&gt;
 prop2	y&lt;br /&gt;
* Если мы не отключаем disableCaching, Ext добавит уникальный параметр _dc, отключающий кэширование&lt;br /&gt;
* Надеемся, что вам ясно теперь, что всегда при использовании Ext.urlEncode() вы не передаете JSON на сервер непосредственно, только серию пар имя/значение.&lt;br /&gt;
&lt;br /&gt;
Если вместо этого мы используем POST(используется по умолчанию, когда указан params), происходят аналогияные вещи, за исключением того, что пары имя/значение отправляются как тело POST-запроса.&lt;br /&gt;
&lt;br /&gt;
Для отправки JSON на сервер, нам необходимо использовать Ext.encode() для конвертирования наших данных в строку JSON. Ext.Ajax.request() ожидает url-кодированную строку, поэтому вы можете или самостоятельно кодировать ее, используя encodeURIComponent(), или еще лучше превратите вашу JSON-строку в простой объект и получите кодирование, сделанное за вас Ext.Ajax.request():&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var req = Ext.Ajax.request({&lt;br /&gt;
    url: &amp;quot;/ws/search.pl&amp;quot;,&lt;br /&gt;
    params: {json: Ext.encode(obj)},&lt;br /&gt;
    disableCaching: false&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и раньше, сервер увидит:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;prop1&amp;quot;:&amp;quot;a0~`!@#$%^&amp;amp;*()-_+={}[]|\\:;\&amp;quot;',.?/&amp;quot;,&amp;quot;prop2&amp;quot;:[&amp;quot;x&amp;quot;,&amp;quot;y&amp;quot;],&amp;quot;prop3&amp;quot;:{&amp;quot;nestedProp1&amp;quot;:&amp;quot;abc&amp;quot;,&amp;quot;nestedProp2&amp;quot;:456}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Которую вы затем можете декодировать для доступа к данным.&lt;br /&gt;
&lt;br /&gt;
== Смотрите также ==&lt;br /&gt;
* [[Manual:Core:Ext.Ajax]]&lt;/div&gt;</description>
			<pubDate>Sun, 15 Nov 2009 03:45:36 GMT</pubDate>			<dc:creator>LissachenkoAlexander-97728</dc:creator>			<comments>http://www.extjs.com/learn/Manual_talk:Core:Working_with_JSON_ru</comments>		</item>
	</channel>
</rss>