<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jQuery и другое... &#187; json</title>
	<atom:link href="http://www.linkexchanger.su/tag/json/feed" rel="self" type="application/rss+xml" />
	<link>http://www.linkexchanger.su</link>
	<description>css, html, php, javascript, jQuery, ajax ... - решения, примеры, рецепты</description>
	<lastBuildDate>Sun, 08 Jan 2012 13:25:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Каскад раскрывающихся списков</title>
		<link>http://www.linkexchanger.su/2009/82.html</link>
		<comments>http://www.linkexchanger.su/2009/82.html#comments</comments>
		<pubDate>Fri, 06 Feb 2009 09:00:42 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[ajax]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[список]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2009/82.html</guid>
		<description><![CDATA[При создании приложений для Web часто бывает необходимо установить в элементе select варианты выбора, значения которых зависят от параметров другого элемента select. Простой пример &#8211; выбор страны в одном раскрывающемся списке приводит к загрузке в следующий такой список перечня автомобилей, производимых в этой стране. А при выборе марки автомобиля, в следующий список загружаются модели этого [...]]]></description>
			<content:encoded><![CDATA[<p>При создании приложений для Web часто бывает необходимо установить в элементе <strong>select</strong> варианты выбора, значения которых зависят от параметров другого элемента <strong>select</strong>. Простой пример &#8211; выбор страны в одном раскрывающемся списке приводит к загрузке в следующий такой список перечня автомобилей, производимых в этой стране. А при выборе марки автомобиля, в следующий список загружаются модели этого авто. Вот и давайте попробуем вместе решить эту задачу, создав <strong>каскад раскрывающихся списков</strong>.<span id="more-82"></span></p>
<p>Для начала определим задачу: первый список будет содержать предварительно загруженные названия стран и всегда находиться в активном состоянии. Два оставшихся списка &#8211; выбора авто и выбора модели, пустые и находятся в неактивном состоянии. После того, как в первом списке будет выбрана страна необходимо заполнить второй список названиями автомобилей и перевести его в активное состояние. А после выбора названия автомобиля &#8211; заполнить список названиями моделей именно этого автомобиля и тоже активировать список. Кроме того, мы должны гарантировать, что пользователь никогда не сможет выбрать автомобиль &laquo;HONDA Vectra произведеный в Ю.Корее&raquo;. Для обмена данными с сервером будем использовать популярный нынче формат JSON.</p>
<p>Итак, задача определена. Поехали?</p>
<p>Начнем с чего-нибудь очень простого. Например с подключения библиотеки jQuery и создания HTML-разметки:</p>
<p>В HEAD страницы подключаем библиотеку:</p>
<pre class="brush: xml;">&lt;script src=&quot;js/jquery-1.3.1.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>В BODY создаем HTML-разметку:</p>
<pre class="brush: xml;">
&lt;div class=&quot;border&quot;&gt;
  &lt;label&gt;Страна&lt;/label&gt;&lt;br /&gt;
  &lt;select id=&quot;country&quot;&gt;
    &lt;option value=&quot;&quot;&gt;Выбрать страну&lt;/option&gt;
    &lt;option value=&quot;1&quot;&gt;Германия&lt;/option&gt;
    &lt;option value=&quot;2&quot;&gt;Ю.Корея&lt;/option&gt;
    &lt;option value=&quot;3&quot;&gt;Япония&lt;/option&gt;
  &lt;/select&gt;
&lt;/div&gt;
&lt;div class=&quot;border&quot;&gt;
  &lt;label&gt;Автомобиль&lt;/label&gt;&lt;br /&gt;
  &lt;select id=&quot;auto&quot; disabled=&quot;disabled&quot;&gt;&lt;/select&gt;
&lt;/div&gt;
&lt;div class=&quot;border&quot;&gt;
  &lt;label&gt;Модель&lt;/label&gt;&lt;br /&gt;
  &lt;select id=&quot;model&quot; disabled=&quot;disabled&quot;&gt;&lt;/select&gt;
&lt;/div&gt;
</pre>
<p>Легко и просто! Каждому списку &#8211; по id. Первый раскрывающийся список заполняем названиями стран. Два других ничем не заполняем и мало того, устанавливаем в неактивное состояние с помощью атрибута disabled. Описания стилей я приводить не буду &#8211; это дело вкуса каждого и не в тему этой статьи.</p>
<p>Что дальше? Задача оказалась не так уж и проста, как казалось в начале. Поэтому предлагаю пораскинуть мозгами и решить, какие  общие действия мы будем производить над всеми списками. Я придумал два &#8211; заполнение списка и очистка списка. Давайте оформим  эти операции в виде методов jQuery, чтобы иметь возможность в любой момент вызвать этот метод в цепочке команд jQuery.</p>
<blockquote><p>Расширение для jQUery может быть либо методом, оперирующим с набором элементов, либо вспомогательной функцией, которая определяется непосредственно в $. Простой пример: в составе библиотеки есть метод <strong>each(callback)</strong>, который работает как раз с набором элементов, выполняя функцию, определенную в параметре callback в контексте каждого элемента набора и вспомогательная функция <strong>$.each(object,callback)</strong>, которая применяется для обхода массива или объекта, переданного в первом параметре с выполнением функции callback для каждого элемента массива(объекта). Почувствовали разницу?</p></blockquote>
<pre class="brush: jscript;">(function($){
  // очищаем select
  $.fn.clearSelect = function() {
    return this.each(function(){
      if(this.tagName=='SELECT') {
        this.options.length = 0;
        $(this).attr('disabled','disabled');
      }
    });
  }
  // заполняем select
  $.fn.fillSelect = function(dataArray) {
    return this.clearSelect().each(function(){
      if(this.tagName=='SELECT') {
        var currentSelect = this;
        $.each(dataArray,function(index,data){
          var option = new Option(data.text,data.value);
          if($.support.cssFloat) {
            currentSelect.add(option,null);
          } else {
            currentSelect.add(option);
          }
        });
      }
    });
  }
})(jQuery);</pre>
<p>Итак, что мы тут написали?</p>
<p>При написании метода <strong>clearSelect()</strong> мы воспользовались методом <strong>each(callback)</strong> для того, чтобы произвести необходимые операции над каждым элементом, переданным в наборе jQuery. Сначала производим проверку &#8211; если <strong>tagName</strong> переданного элемента действительно SELECT, то удаляем все элементы option и устанавливаем атрибуту disabled значение disabled.</p>
<p>Метод <strong>fillSelect(dataArray)</strong> несколько сложнее. Он получает в качестве параметра массив dataArray, содержащий данные, которыми необходимо заполнить выпадающий список. Правда перед тем, как заполнять список, мы вызовем метод <strong>clearSelect</strong>, чтобы очистить список от возможно оставшихся там данных. С помощью метода <strong>each(callback)</strong> мы перебираем все элементы, переданные в наборе jQuery, проверяем, действительно ли это элемент select и, если да, то сначала запоминаем его в переменной currentSelect. Затем воспользуемся вспомогательной функцией <strong>$.each(object,callback)</strong> для обхода массива dataArray. В каждой итерации создаем элемент options, заполняем его соответствующими данными и добавляем в select.</p>
<p>При добавлении option мы вынуждены учитывать различия между браузерами. К счастью и тут поможет jQuery. Здесь используем новую вспомогательную функцию <strong>$.support</strong>, которая появилась в jQuery с версии 1.3 взамен <strong>$.browser</strong>. Проверим значение свойства <strong>cssFloat</strong> &#8211; false укажет нам на IE, а true на FF, Opera, Safari. Вы можете применить свой способ проверки.</p>
<blockquote><p>Обратите внимание: при написании метода <strong>fillSelect(dataArray)</strong> мы использовали метод <strong><a href="http://docs.jquery.com/Core/each#callback">each(callback)</a></strong> и вспомогательную функцию <strong><a href="http://docs.jquery.com/Utilities/jQuery.each#objectcallback">$.each(object,callback)</a></strong> &#8211; это разные вещи.</p></blockquote>
<p>Теперь оба наших новых метода могут работать с набором элементов jQuery, который им будет передан. Этот код можно было бы вынести в отдельный файл &#8211; к тому же эти методы могут пригодиться и в других приложениях, а использовать их можно проще простого:</p>
<pre class="brush: jscript;">
// очищаем select
$('select').clearSelect();
// заполняем select
$('select').fillSelect(dataArray);</pre>
<p>Двигаемся дальше. Теперь мы напишем пару функций, которые будут обслуживать списки выбора автомобиля и выбора модели.</p>
<pre class="brush: jscript;">
// выбор автомобиля
function adjustAuto(){
  var countryValue = $('#country').val();
  var tmpSelect = $('#auto');
  if(countryValue.length == 0) {
    tmpSelect.attr('disabled','disabled');
    tmpSelect.clearSelect();
    adjustModel();
  } else {
    $.getJSON(
      'cascadeSelectAuto.php',
      {country:countryValue},
      function(data) {
        tmpSelect.fillSelect(data).attr('disabled','');
        adjustModel();
    });
  }
};</pre>
<p>Здесь мы сначала запоминаем в переменной <strong>countryValue</strong> значение, выбранное в списке стран <strong>#country</strong>. В переменной <strong>tmpSelect</strong> будем хранить ссылку на элемент select с идентификатором <strong>#auto</strong> &#8211; список выбора автомобиля. Далее следует проверка:</p>
<p>Если страна не выбрана, то мы устанавливаем атрибуту disabled элемента select с идентификатором <strong>#auto</strong> значение &#8216;disabled&#8217; и вызываем метод <strong>clearSelect()</strong> для очистки этого списка от возможно находящихся там значений. Также мы вызовем функцию <strong>adjustModel()</strong> (про нее чуть позже).</p>
<p>Иначе, мы отправляем с помощью вспомогательной функции <strong>$.getJSON</strong> запрос к файлу <strong>cascadeSelectAuto.php</strong>, передавая в качестве данных значение, сохраненное в переменной <strong>countryValue</strong>. При получении ответа сервера вызываем функцию, в которой определена нужная нам последовательность действий. А именно &#8211; к переменной <strong>tmpSelect</strong> (не забыли &#8211; это список с идентификатором <strong>#auto</strong>) применяем нами же написанный метод <strong>fillSelect(data)</strong>, который заполнит список данными, которые получены от сервера и наконец переводим элемент в активное состояние с помощью атрибута disabled. Остается не забыть вызвать функцию <strong>adjustModel()</strong>, чтобы обработать выпадающий список моделей.</p>
<p>Функция <strong>adjustModel()</strong>, которая обрабатывает список моделей, очень похожа на <strong>adjustAuto()</strong>, поэтому нет смысла ее детально рассматривать. Обратите внимание разве на то, что теперь мы запоминаем значение из списка не только выбранной страны, но и выбранного автомобиля. И еще в <strong>if &#8211; else</strong> не вызываем что-то похожее на <strong>adjustModel()</strong>, поскольку список выбора модели у нас последний &#8211; дальше обрабатывать просто нечего.</p>
<pre class="brush: jscript;">
// выбор модели
function adjustModel(){
  var countryValue = $('#country').val();
  var autoValue = $('#auto').val();
  var tmpSelect = $('#model');
  if(countryValue.length == 0||autoValue.length == 0) {
    tmpSelect.attr('disabled','disabled');
    tmpSelect.clearSelect();
  } else {
    $.getJSON(
      'cascadeSelectModel.php',
      {country:countryValue,auto:autoValue},
      function(data) {
        tmpSelect.fillSelect(data).attr('disabled','');
    });
  }
};</pre>
<p>Поздравляю! Самая сложная часть пути уже позади! Остались сущие пустяки.</p>
<pre class="brush: jscript;">$('#country').change(function(){
  adjustAuto();
}).change();</pre>
<p>Связываем с выпадающим списком стран событие <strong>change(fn)</strong>, при наступлении которого вызываем <strong>adjustAuto()</strong> &#8211; функцию, которая заполнит выпадающий список автомобилей. В цепочке команд вызываем <strong>change()</strong>, чтобы вызвать событие при начальной загрузке страницы.</p>
<pre class="brush: jscript;">$('#auto').change(adjustModel);</pre>
<p>С выпадающим списком автомобилей связываем событие <strong>change(fn)</strong>, при наступлении которого будет выполнена функция <strong>adjustModel()</strong>, которая заполнит список моделей.</p>
<pre class="brush: jscript;">$('#model').change(function(){
  if($(this).val().length != 0) {
    alert('Выбор сделан!');
  }
});</pre>
<p>И наконец, при изменении списка моделей выполним небольшую проверку &#8211; если действительно выбрана какая-либо модель, выведем в <strong>alert</strong> сообщение. Ну а в действительности тут можно придумать все, что угодно. Например вывести подробную информацию о технических характеристиках, красивую фотографию авто, чтобы его захотелось купить и конечно цену&#8230;</p>
<p>Ах, да! Совсем забыл &#8211; работающий пример:<br />
<iframe src="http://www.linkexchanger.su/jquery_articles/cascadeSelect.html" style="border: medium none " width="420" height="100"></iframe></p>
<blockquote><p>Вы можете открыть <strong><a href="http://www.linkexchanger.su/jquery_articles/cascadeSelect.html" target="_blank">пример</a></strong> в новом окне, чтобы посмотреть исходный код. Вы можете <strong><a href="http://www.linkexchanger.su/jquery_articles/cascadeSelect.zip">скачать</a></strong> архив, который содержит файлы примера (в том числе cascadeSelectAuto.php и cascadeSelectModel.php).</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2009/82.html/feed</wfw:commentRss>
		<slash:comments>104</slash:comments>
		</item>
		<item>
		<title>Как работать с JSON?</title>
		<link>http://www.linkexchanger.su/2008/41.html</link>
		<comments>http://www.linkexchanger.su/2008/41.html#comments</comments>
		<pubDate>Mon, 03 Mar 2008 05:50:06 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[ajax]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/41.html</guid>
		<description><![CDATA[Вероятно Вы уже прочитали статью &#171;Что такое JSON?&#171;. Если нет, то я рекомендую сначала ознакомиться именно с ней, чтобы понять все с самого начала. А здесь мы поговорим о преобразованиях объектов JavaScript в формат JSON и обратных преобразованиях строки ответа от сервера в формате JSON в объект JavaScript, а также рассмотрим средства для работы с [...]]]></description>
			<content:encoded><![CDATA[<p>Вероятно Вы уже прочитали статью &laquo;<a href="http://www.linkexchanger.su/2008/40.html">Что такое JSON?</a>&laquo;. Если нет, то я рекомендую сначала ознакомиться именно с ней, чтобы понять все с самого начала. А здесь мы поговорим о преобразованиях объектов JavaScript в формат <strong>JSON</strong> и обратных преобразованиях строки ответа от сервера в формате <strong>JSON</strong> в объект JavaScript, а также рассмотрим средства для работы с <strong>JSON</strong> на стороне сервера.<span id="more-41"></span></p>
<p>Дуглас Крокфорд (Douglas Crockford), который собственно и предложил <strong>формат JSON</strong> в качестве альтернативы XML при передаче данных от сервера клиенту, в рамках этого проекта разработал специальную утилиту, предназначенную для упомянутых выше преобразований. Исходник можно найти по адресу <a href="http://www.json.org/js.html" target="_blank">http://www.json.org/js.html.</a></p>
<p>В предыдущей статье о <strong>JSON</strong> мы уже немного коснулись преобразования строки данных в объект JavaScript с помощью функции <strong>eval()</strong>, но все-таки нельзя забывать о том, что функция эта не только поможет интерпретировать данные в формат JSON, но и выполнит любой JavaScript-код, который будет ей передан. Так как это обстоятельство может представлять собой потенциальную угрозу, логичнее воспользоваться утилитой Дугласа Крокфорда.</p>
<p>Но давайте обо всем по порядку. Для начала подключим утилиту к нужному файлу:</p>
<pre class="brush: jscript;">&lt;script src=&quot;json.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Создадим объект <strong>oAuto</strong> обычным способом, забыв о литеральной нотации.</p>
<pre class="brush: jscript;">var oAuto = new Object();
oAuto.firm = &quot;Audi&quot;;
oAuto.model = &quot;A6&quot;;
oAuto.year = 2008;
oAuto.price = 78000;
oAuto.sellers = new Array(
  &quot;Фирма А&quot;,
  &quot;Фирма Б&quot;,
  &quot;Фирма В&quot;
);</pre>
<p>Передадим объект методу <strong>JSON.stringify()</strong></p>
<pre class="brush: jscript;">document.write(JSON.stringify(oAuto));</pre>
<p>и в результате работы этого небольшого кусочка кода будет выведена <strong>строка в формате JSON</strong>, которую можно передавать по любому адресу.</p>
<pre class="brush: jscript;">{&quot;firm&quot;:&quot;Audi&quot;,&quot;model&quot;:&quot;A6&quot;,&quot;year&quot;:2008,
&quot;price&quot;:78000,&quot;sellers&quot;:[&quot;Фирма А&quot;,&quot;Фирма Б&quot;,&quot;Фирма В&quot;]}</pre>
<p>Предположим теперь, что эту самую строку мы получили в качестве ответа от сервера и ее надо преобразовать в объект JavaScript. Так нет ничего проще. Передаем строку методу <strong>JSON.parse()</strong></p>
<pre class="brush: jscript;">var oAuto = JSON.parse(sAuto);</pre>
<p>и получаем объект JavaScript.</p>
<blockquote><p>Вы можете скачать <a href="http://www.linkexchanger.su/example_json/json.zip">исходный код</a> примера, и испытать его на своем сайте.</p></blockquote>
<p>Необходимо упомянуть также, что метод <strong>JSON.parse()</strong> может принимать опционально еще один параметр.</p>
<pre class="brush: jscript;">var myObject = JSON.parse(myJSONtext, filter);</pre>
<p>Более полную информацию Вы всегда можете найти на сайте <a href="http://www.json.org/json-ru.html">http://www.json.org/</a>.</p>
<p>Мы вкратце познакомились с тем, как можно работать с данными в формате <strong>JSON</strong> на стороне клиента, а как обстоит дело при работе на стороне сервера? Оказывается существует довольно много программного обеспечения для работы с <strong>JSON</strong> в языках на которых пишутся серверные сценарии. <strong>JSON</strong> может применяться в <strong>Pyton</strong>, <strong>C#/.NET</strong>, <strong>PHP</strong>, <strong>ColdFusion</strong>, <strong>Perl</strong>, <strong>Java</strong> и т.д. Полный список можно найти на <a href="http://www.json.org/json-ru.html">http://www.json.org/</a>, а я для примера выбрал <strong>PHP</strong>, как наиболее близкий мне.</p>
<p>Утилита <strong>JSON-PHP</strong> написана Михалем Мигурски (Michal Migurski). Сама утилита &#8211; это один файл JSON.PHP, но для работы с утилитой требуется библиотека <strong>PEAR</strong> (PHP Extension and Application Repository). Скачать утилиту можно отсюда <a href="http://pear.php.net/pepr/pepr-proposal-show.php?id=198" target="_blank">http://pear.php.net/pepr/pepr-proposal-show.php?id=198</a>.</p>
<blockquote><p>Если Ваш хостер не удосужился включить библиотеку PEAR &#8211; не расстраивайтесь. Вы вполне можете сделать все самостоятельно. Не обязательно даже иметь права администратора сервера. Я приведу ссылки. Кому очень понадобится &#8211; тот обязательно разберется.<br />
<a href="http://pear.php.net/manual/en/installation.getting.php" target="_blank">http://pear.php.net/manual/en/installation.getting.php</a> &#8211; см. раздел &laquo;PEAR in hosting environments&raquo;.<br />
В принципе нужно только получить инсталляционный файл, загрузить его на свой сервер, вызвать в адресной строке браузера и далее только следовать инструкциям.<br />
А <a href="http://subscribe.ru/archive/inet.webbuild.php5whatsnew/200512/30010819.html" target="_blank">здесь</a> посмотрите раздел &laquo;Динамическая коррекция пути к включаемым файлам&raquo;.</p></blockquote>
<p>Разберем все на примере. Пусть имеем такое определение класса (для PHP5)</p>
<pre class="brush: php;">
class Auto {
  public $firm;
  public $model;
  public $year;
  public $price;
  public $sellers;

  function Auto($firm,$model,$year,$price) {
    $this-&gt;firm = $firm;
    $this-&gt;model = $model;
    $this-&gt;year = $year;
    $this-&gt;price = $price;
    $this-&gt;sellers = array();
  }
}</pre>
<p>Используем этот класс так:</p>
<pre class="brush: php;">
$oAuto = new Auto(&quot;Audi&quot;, &quot;A6&quot;, 2008, 78000);
$oAuto-&gt;sellers[0] = &quot;Фирма А&quot;;
$oAuto-&gt;sellers[1] = &quot;Фирма Б&quot;;
$oAuto-&gt;sellers[2] = &quot;Фирма В&quot;;
</pre>
<p>Теперь то, что нас интересует больше всего. Подключаем утилиту <strong>JSON-PHP</strong>, создаем новый экземпляр объекта <strong>Services_JSON</strong> и передаем объект <strong>$oAuto</strong> методу <strong>encode()</strong>:</p>
<pre class="brush: php;">require_once(&quot;JSON.php&quot;);
$json = new Services_JSON();
$sJSONText = $json-&gt;encode($oAuto);</pre>
<p>В результате переменная <strong>$sJSONText</strong> будет содержать строку в формате <strong>JSON</strong>:</p>
<pre class="brush: jscript;">{&quot;firm&quot;:&quot;Audi&quot;,&quot;model&quot;:&quot;A6&quot;,&quot;year&quot;:2008,&quot;price&quot;:78000,
&quot;sellers&quot;:[&quot;\u0424\u0438\u0440\u043c\u0430 \u0410&quot;,&quot;\u0424\u0438\u0440\u043c\u0430 \u0411&quot;,&quot;\u0424\u0438\u0440\u043c\u0430 \u0412&quot;]}</pre>
<blockquote><p>Здесь хочу обратить Ваше внимание на то, что утилита <strong>JSON-PHP</strong> понимает строки или в <strong>ASCII</strong>, или в <strong>UTF-8</strong>. Поэтому существенный выигрыш можно получить при использовании латинских символов, тогда как использование кириллицы в кодировке windows-1251 может привести к увеличению объема данных. Обратите внимание на то место в строке, где должны передаваться Фирма А, Фирма Б, Фирма В.</p></blockquote>
<p>Но цели мы достигли &#8211; объект <strong>$oAuto</strong> готов к передаче в сценарий на языке JavaScript.</p>
<p>Разберем обратную операцию &#8211; преобразование строки текста в формате <strong>JSON</strong> в объект <strong>PHP</strong>. Все, что для этого нужно сделать, это передать строку методу <strong>decode()</strong>:</p>
<pre class="brush: php;">$value = $json-&gt;decode($sJSONText);</pre>
<p>Если теперь использовать например <strong>print_r()</strong>, то мы сможем убедиться, что объект был создан:</p>
<pre class="brush: php;">
( [firm] =&gt; Audi [model] =&gt; A6
[year] =&gt; 2008 [price] =&gt; 78000
[sellers] =&gt; Array ( [0] =&gt; Фирма А [1] =&gt; Фирма Б [2] =&gt; Фирма В ) )</pre>
<p>Все это есть в примере, который Вы сможете скачать. Пример включает и утилиту <strong>JSON-PHP</strong>. Естественно, Вам придется немного поправить пример в той части, где корректируются пути к библиотеке <strong>PEAR</strong>, либо удалить этот фрагмент кода, если библиотека у Вас уже подключена.</p>
<blockquote><p>Архив с примером можно <a href="http://www.linkexchanger.su/example_json/json2.zip">скачать</a> здесь.</p></blockquote>
<p>Что можно еще сказать? Разве что упомянуть о том, что утилита <strong>JSON-PHP</strong> не единственная для работы с <strong>JSON</strong> на стороне сервера. Существует расширение PHP &#8211; <strong>php-json</strong> (написано на C Омаром Килани (Omar Kilani)), однако для его установки потребуется умение устанавливать модули расширения PHP. Вот и все, пожалуй.</p>
<p>Буду рад, если найдете время для того, чтобы оставить свои отзывы&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/41.html/feed</wfw:commentRss>
		<slash:comments>52</slash:comments>
		</item>
		<item>
		<title>Что такое JSON?</title>
		<link>http://www.linkexchanger.su/2008/40.html</link>
		<comments>http://www.linkexchanger.su/2008/40.html#comments</comments>
		<pubDate>Thu, 28 Feb 2008 05:46:28 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[ajax]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/40.html</guid>
		<description><![CDATA[JSON (JavaScript Object Notation &#8211; представление объектов JavaScript) &#8211; легкий формат представления данных, основанный на подмножестве синтаксиса JavaScript, а точнее на литералах массивов и объектов. JSON &#8211; это альтернатива традиционным форматам (обычный текст или XML), которые используются при обмене данными между сервером и клиентом. В отличие от XML и XML-совместимых языков, которые требуют синтаксического анализа, [...]]]></description>
			<content:encoded><![CDATA[<p><strong>JSON</strong> (JavaScript Object Notation &#8211; представление объектов JavaScript) &#8211; легкий формат представления данных, основанный на подмножестве синтаксиса JavaScript, а точнее на <strong>литералах</strong> массивов и объектов. JSON &#8211; это альтернатива традиционным форматам (обычный текст или XML), которые используются при обмене данными между сервером и клиентом. В отличие от XML и XML-совместимых языков, которые требуют синтаксического анализа, определения JSON могут быть просто включены в сценарии JavaScript. Формат JSON предложен программистом Дугласом Крокфордом (Douglas Crockford).<span id="more-40"></span></p>
<p>Может я зайду издалека, но для того чтобы действительно понять JSON, сначала поймем (вспомним) синтаксис массивов и объектов в литеральной нотации JavaScript.</p>
<p><strong>Массивы как литералы</strong><br />
Массив в JavaScript можно определить с помощью конструктора Array, например так:</p>
<pre class="brush: jscript;">var aData = new Array(&quot;строка&quot;, true, 43, null);</pre>
<blockquote><p>В JavaScript массивы нетипизированные, поэтому в них можно хранить различные типы данных. В примере массив содержит строку, логическое значение, число и значение null.</p></blockquote>
<p>Массив же, описываемый как литерал, можно определить с помощью квадратных скобок, внутри &#8211; значения элементов массива, через запятую. Вот как будет выглядеть тот же самый массив, но в литеральной нотации:</p>
<pre class="brush: jscript;">var aData = [&quot;строка&quot;, true, 43, null];</pre>
<p>Обращаться к отдельным элемента массива можно указывая имя массива и номер элемента:</p>
<pre class="brush: jscript;">alert(aData[0]);
alert(aData[1]);</pre>
<p><strong>Объекты как литералы</strong><br />
Объекты в JavaScript определяются с помощью конструктора Object, например так:</p>
<pre class="brush: jscript;">var oAuto = new Object();
oAuto.firm = &quot;Audi&quot;;
oAuto.model = &quot;A6&quot;;
oAuto.year = 2008;
oAuto.price = 78000;</pre>
<p>Тот же самый код, но в литеральной нотации будет выглядеть так:</p>
<pre class="brush: jscript;">var oAuto = {
  &quot;firm&quot;:&quot;Audi&quot;,
  &quot;model&quot;:&quot;A6&quot;,
  &quot;year&quot;:2008,
  &quot;price&quot;:78000
};</pre>
<p>Этот код создает объект со свойствами firm, model, year и price и обращаться к ним можно таким образом:</p>
<pre class="brush: jscript;">alert(oAuto.model);
alert(oAuto.year);</pre>
<p>но можно использовать и синтаксис массивов обращаясь к свойствам объекта таким образом:</p>
<pre class="brush: jscript;">alert(oAuto[&quot;model&quot;]);
alert(oAuto[&quot;year&quot;]);</pre>
<p>В литеральной нотации описания массивов и объектов можно вкладывать друг в друга, создавая таким образом <strong>объект массивов</strong> или <strong>массив объектов</strong>. Посмотрите этот код:</p>
<pre class="brush: jscript;">var aAuto = [
  {
    &quot;firm&quot;:&quot;BMW&quot;,
    &quot;model&quot;:&quot;X5&quot;,
    &quot;year&quot;:2007,
    &quot;price&quot;:99000
  },
  {
    &quot;firm&quot;:&quot;Audi&quot;,
    &quot;model&quot;:&quot;A6&quot;,
    &quot;year&quot;:2008,
    &quot;price&quot;:78000
  },
  {
    &quot;firm&quot;:&quot;Volkswagen&quot;,
    &quot;model&quot;:&quot;Touareg 7L&quot;,
    &quot;year&quot;:2006,
    &quot;price&quot;:45000
  }
];</pre>
<p>Мы создали массив aAuto, который содержит три объекта. Комбинируя синтаксис обращения к массивам с синтаксисом обращения к объектам попробуем получить год выпуска второго автомобиля:</p>
<pre class="brush: jscript;">alert(aAuto[1].year); // получаем 2008</pre>
<p>Можно сделать наоборот, и описать объект массивов:</p>
<pre class="brush: jscript;">var oAuto = {
  &quot;firm&quot;:[&quot;BMW&quot;, &quot;Audi&quot;, &quot;Volkswagen&quot;],
  &quot;model&quot;:[&quot;X5&quot;, &quot;A6&quot;, &quot;Touareg 7L&quot;],
  &quot;year&quot;:[2007, 2008, 2006],
  &quot;price&quot;:[99000, 78000, 45000]
};</pre>
<p>в этом случае обращаемся сначала к объекту, а затем к массиву внутри него:</p>
<pre class="brush: jscript;">alert(oAuto.year[1]); // получаем 2008</pre>
<p>Вот такое длинное получилось предисловие, но зато теперь будет гораздо понятнее при чем здесь вообще <strong>JSON</strong>&#8230;</p>
<p><strong>JSON</strong> &#8211; комбинация массивов и объектов и предназначен только для хранения данных. Как следствие, <strong>JSON</strong> не может иметь переменных и не допускает никаких операций над ними. Давайте попробуем записать предыдущий пример, используя синтаксис <strong>JSON</strong>:</p>
<pre class="brush: jscript;">{
  &quot;firm&quot;:[&quot;BMW&quot;, &quot;Audi&quot;, &quot;Volkswagen&quot;],
  &quot;model&quot;:[&quot;X5&quot;, &quot;A6&quot;, &quot;Touareg 7L&quot;],
  &quot;year&quot;:[2007, 2008, 2006],
  &quot;price&quot;:[99000, 78000, 45000]
}</pre>
<p><strong>Обратите внимание</strong>, что пропали имя переменной и точка-запятая. Передача такого объекта с использованием HTTP-протокола будет происходить очень быстро, поскольку содержит минимум символов. Получив такие данные на стороне клиента и записав ее в какую-либо переменную (например sData) мы получаем строку информации.<br />
<strong>Обратите внимание</strong>: именно строку, а совсем не объект или объект с вложенными в него массивами. Преобразуем строку в объект, используя функцию <strong>eval()</strong>.</p>
<pre class="brush: jscript;">var oAuto = eval(&quot;(&quot; + sData + &quot;)&quot;);</pre>
<p>В результате этого получится объект, который мы описали чуть выше.</p>
<p><strong>Преимущество JSON перед XML</strong><br />
Так в чем же все-таки состоит преимущество JSON перед XML?</p>
<blockquote><p>Здесь речь идет исключительно о преимуществах и недостатках только лишь с точки зрения организации обмена данными в Сети.</p></blockquote>
<p>В том, что язык XML оказывается очень избыточным при сравнении с JSON. Давайте убедимся в этом на простом примере. Одни и те же данные представим в формате XML и в формате JSON.</p>
<pre class="brush: xml;">&lt;general&gt;
  &lt;cars&gt;
    &lt;car&gt;
      &lt;firm&gt;BMW&lt;/firm&gt;
      &lt;model&gt;X5&lt;/model&gt;
      &lt;year&gt;2007&lt;/year&gt;
      &lt;price&gt;99000&lt;/price&gt;
    &lt;/car&gt;
    &lt;car&gt;
      &lt;firm&gt;Audi&lt;/firm&gt;
      &lt;model&gt;A6&lt;/model&gt;
      &lt;year&gt;2008&lt;/year&gt;
      &lt;price&gt;78000&lt;/price&gt;
    &lt;/car&gt;
    &lt;car&gt;
      &lt;firm&gt;Volkswagen&lt;/firm&gt;
      &lt;model&gt;Touareg 7L&lt;/model&gt;
      &lt;year&gt;2006&lt;/year&gt;
      &lt;price&gt;45000&lt;/price&gt;
    &lt;/car&gt;
  &lt;/cars&gt;
&lt;/general&gt;</pre>
<p>так это выглядит в формате XML, а ниже &#8211; в формате JSON:</p>
<pre class="brush: jscript;">{ &quot;general&quot;:
  {
    &quot;cars&quot;:[
      {
        &quot;firm&quot;:&quot;BMW&quot;,
        &quot;model&quot;:&quot;X5&quot;,
        &quot;year&quot;:2007,
        &quot;price&quot;:99000
      },
      {
        &quot;firm&quot;:&quot;Audi&quot;,
        &quot;model&quot;:&quot;A6&quot;,
        &quot;year&quot;:2008,
        &quot;price&quot;:78000
      },
      {
        &quot;firm&quot;:&quot;Volkswagen&quot;,
        &quot;model&quot;:&quot;Touareg 7L&quot;,
        &quot;year&quot;:2006,
        &quot;price&quot;:45000
      }
    ]
  }
}</pre>
<p>При использовании формата JSON выигрыш составит 42 байта, а без учета пробелов и вовсе 86 байт. А если вспомнить еще и о том, что данные в формате JSON не требуют дополнительного синтаксического анализа на стороне клиента &#8211; преимущество JSON перед XML в аспекте передачи данных от сервера клиенту становится очевидным&#8230;</p>
<p>По этой теме могу порекомендовать прочитать переводную статью <a href="http://habrahabr.ru/blog/webdev/23779.html" target="_blank"><strong>JSON и XML. Что лучше?</strong></a> на Хабрахабре, а я надеюсь, что мне удастся в ближайшем будущем подробнее рассказать о утилитах для работы с JSON как на стороне клиента, так и на стороне сервера.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/40.html/feed</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>jQuery и Ajax: разное</title>
		<link>http://www.linkexchanger.su/2008/37.html</link>
		<comments>http://www.linkexchanger.su/2008/37.html#comments</comments>
		<pubDate>Fri, 15 Feb 2008 05:53:00 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[ajax]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery документация]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/37.html</guid>
		<description><![CDATA[Нам осталось познакомиться еще с несколькими возможностями работы с Ajax, которые предоставляет javascript-библиотека jQuery&#8230;
jQuery.ajaxSetup( options ) &#8211; позволяет выполнить установку глобальных настроек для выполнения ajax-запросов. Принимает один аргумент в виде набора пар ключ/значение чтобы сконфигурировать настройки ajax-запросов по умолчанию. Все настройки опциональны.
Не буду повторять еще раз описания всех доступных опций, поскольку их можно посмотреть в [...]]]></description>
			<content:encoded><![CDATA[<p>Нам осталось познакомиться еще с несколькими возможностями работы с Ajax, которые предоставляет javascript-библиотека jQuery&#8230;<span id="more-37"></span></p>
<p><strong>jQuery.ajaxSetup( options )</strong> &#8211; позволяет выполнить установку глобальных настроек для выполнения ajax-запросов. Принимает один аргумент в виде набора пар ключ/значение чтобы сконфигурировать настройки ajax-запросов по умолчанию. Все настройки опциональны.</p>
<p>Не буду повторять еще раз описания всех доступных опций, поскольку их можно посмотреть в статье <a href="http://www.linkexchanger.su/2008/34.html">jQuery и Ajax: запросы</a>, а приведу только небольшой поясняющий пример:</p>
<pre class="brush: jscript;">$.ajaxSetup({
  url: &quot;/handler.php&quot;,
  timeout: 3000,
  type: &quot;POST&quot;
});
$.ajax({ data: myData });</pre>
<p>Настройки по умолчанию определяют отправку ajax-запроса к url &laquo;/handler.php&raquo;, устанавливают тайм-аут 3 секунды и определяют использование POST-запроса вместо GET для всех ajax-запросов (если настройки не будут переопределены для конкретного запроса).<br />
Следующий же ajax-запрос содержит только некоторые данные, которые передает, руководствуясь глобальными настройками.</p>
<p><strong>serialize( )</strong> &#8211; упорядочивает набор элементов input в строку данных. Начиная с версии jQuery 1.2 корректно работает с формами.<br />
<strong>Пример:</strong><br />
Упорядочиваем данные из формы в строку запроса, которая может быть передана на сервер с помощью ajax-запроса.<br />
<iframe src="http://www.linkexchanger.su/example_jquery_ajax/misc.html" style="border: medium none " height="140" width="420"></iframe></p>
<blockquote><p>Вы можете скачать <a href="http://www.linkexchanger.su/example_jquery_ajax/misc.zip">исходный код</a> примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.</p></blockquote>
<p>Не буду приводить HTML и CSS для этого примера, тем более, что его можно скачать. Посмотрим только javascript-код:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
  function showValues() {
    var str = $(&quot;form&quot;).serialize();
    $(&quot;#results&quot;).text(str);
  }
  $(&quot;:checkbox, :radio&quot;).click(showValues);
  $(&quot;select&quot;).change(showValues);
  showValues();
});
&lt;/script&gt;</pre>
<p>Функция <strong>showValues()</strong> &#8211; в переменную <strong>str</strong> пишем строку запроса, которую получаем с помощью <strong>serialize()</strong> для jQuery-селектора <strong>form</strong>. Вторая строка там добавлена только для того, чтобы показать эту самую упорядоченную строку запроса в элементе <strong>#results</strong>, т.е. только для примера.</p>
<p>Более интересны следующие строки:</p>
<pre class="brush: jscript;">$(&quot;:checkbox, :radio&quot;).click(showValues);</pre>
<p>Выбираем все элементы <strong>input</strong> типа <strong>checkbox</strong> и <strong>radio</strong> и по клику на любом из них вызываем функцию <strong>showValues()</strong>.</p>
<pre class="brush: jscript;">$(&quot;select&quot;).change(showValues);</pre>
<p>То же самое проделываем для элементов <strong>select</strong>, только с той разницей, что вызовать функцию <strong>showValues()</strong> будем в случае изменений в элементах <strong>select</strong>.</p>
<pre class="brush: jscript;">showValues();</pre>
<p>Просто вызываем функцию <strong>showValues()</strong> в момент готовности объектной модели документа.</p>
<p><strong>serializeArray( )</strong> &#8211; упорядочивает все формы и элементы форм (очень похоже на .serialize() метод), но возвращает данные в виде, который можно использовать для их представления в структуре <strong>JSON</strong>.</p>
<p>Пример очень похожий. Мы получаем данные из форм, прогоняем через цикл, добавляя их в элемент <strong>#result</strong> (для наглядности).<br />
<iframe src="http://www.linkexchanger.su/example_jquery_ajax/misc2.html" style="border: medium none " height="140" width="420"></iframe></p>
<blockquote><p>Вы можете скачать <a href="http://www.linkexchanger.su/example_jquery_ajax/misc2.zip">исходный код</a> примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.</p></blockquote>
<p>Так же не буду приводить HTML и CSS, а рассмотрим только javascript-код:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
  function showValues() {
    var fields = $(&quot;:input&quot;).serializeArray();
    $(&quot;#results&quot;).empty();
    jQuery.each(fields, function(i, field){
      $(&quot;#results&quot;).append(field.value + &quot; &quot;);
    });
  }
  $(&quot;:checkbox, :radio&quot;).click(showValues);
  $(&quot;select&quot;).change(showValues);
  showValues();
});
&lt;/script&gt;</pre>
<p>Последние три строки абсолютно такие же как и в предыдущем примере, изменилась только функция <strong>showValues()</strong>.</p>
<pre class="brush: jscript;">var fields = $(&quot;:input&quot;).serializeArray();</pre>
<p>В переменную <strong>fields</strong> пишем массив, состоящий из значений полей форм. Обратите внимание, jQuery-селектор <strong>:input</strong> отбирает все элементы <strong>input, textarea, select и button</strong>, а не только input.</p>
<pre class="brush: jscript;">$(&quot;#results&quot;).empty();</pre>
<p>Удаляем все содержимое элемента <strong>#results</strong>.</p>
<pre class="brush: jscript;">jQuery.each(fields, function(i, field){
  $(&quot;#results&quot;).append(field.value + &quot; &quot;);
});</pre>
<p>Для каждого элемента массива <strong>fields</strong> выполняем одну и ту же операцию &#8211; добавляем значение этого поля (с пробелом после него) в элемент <strong>#results</strong> (это опять же для примера, а могли бы делать и что-то другое).</p>
<p>Буду рад, если эта информация кому-нибудь пригодится&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/37.html/feed</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>jQuery и Ajax: запросы</title>
		<link>http://www.linkexchanger.su/2008/34.html</link>
		<comments>http://www.linkexchanger.su/2008/34.html#comments</comments>
		<pubDate>Wed, 13 Feb 2008 05:55:48 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[ajax]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery документация]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/34.html</guid>
		<description><![CDATA[Разработчики библиотеки jQuery дали возможность использовать прелести ajax запросов без глубокого понимания процессов, которые происходят во время этого. Хорошо это или плохо, вопрос неоднозначный. Но, если такая возможность есть, давайте будем ей пользоваться и для начала ближе познакомимся с запросами ajax&#8230;
&#8230; вернее с тем, как их реализовать с помощью jQuery. Ниже я привожу перечень возможных [...]]]></description>
			<content:encoded><![CDATA[<p>Разработчики библиотеки jQuery дали возможность использовать прелести ajax запросов без глубокого понимания процессов, которые происходят во время этого. Хорошо это или плохо, вопрос неоднозначный. Но, если такая возможность есть, давайте будем ей пользоваться и для начала ближе познакомимся с запросами ajax&#8230;<span id="more-34"></span></p>
<p>&#8230; вернее с тем, как их реализовать с помощью jQuery. Ниже я привожу перечень возможных запросов и постараюсь все пояснять на примерах.</p>
<p><strong>load( url, [data], [callback] )</strong> &#8211; загружает HTML из файла и вставляет его в объекную модель документа (DOM). По умолчанию (без [data]) выполняется как GET-запрос, однако, если будут переданы данные, выполнится как POST-запрос. Начиная с версии jQuery 1.2 в url можно определить селектор jQuery, например так:</p>
<pre class="brush: jscript;">$(&quot;#example&quot;).load(&quot;/ li.cat-item&quot;);</pre>
<p>Результат выполнения Вы можете видеть ниже&#8230;.<br />
<iframe src="http://www.linkexchanger.su/example_jquery_ajax/load.html" style="border: medium none " width="420" height="70"></iframe><br />
При выполнении этого запроса, были выбраны все элементы li с классом cat-item в запрашиваемом url и загружены в элемент #example, т.е. мы загрузили меню &laquo;Рубрики&raquo; этого сайта.<br />
Здесь <strong>url</strong> &#8211; загружаемый url, <strong>data</strong> (опционально) &#8211; пары ключ/значение, которые могут быть переданы серверу, <strong>callback</strong> (опционально) &#8211; функция, которая может быть вызвана при окончании запроса (не требует обязательного успешного выполнения).<br />
Еще пара примеров:</p>
<pre class="brush: jscript;">$(&quot;#feeds&quot;).load(&quot;feeds.html&quot;);</pre>
<p>Загружает файл feeds.html в элемент с идентификатором feeds.</p>
<pre class="brush: jscript;">$(&quot;#feeds&quot;).load(&quot;feeds.php&quot;, {limit: 25}, function(){
  alert(&quot;Последние 25 записей загружены&quot;);
});</pre>
<p>То же самое, но дополнительно передается пара ключ/значение limit: 25 и задается функция, которая вызывается по окончании запроса.</p>
<p><strong>jQuery.get( url, [data], [callback] )</strong> &#8211; загружает страницу, используя GET-запрос. Это самый простой способ передачи GET-запроса серверу. Он допускает возможность использования одной функции, которая может быть вызвана при окончании запроса. Но в отличие от <strong>load</strong>, функция будет вызвана лишь при успешном выполнении запроса. Если необходимо определить функцию при ошибке запроса, лучше обратиться к $.ajax.</p>
<p>Несколько примеров:</p>
<pre class="brush: jscript;">$.get(&quot;test.php&quot;);</pre>
<p>Запрашивает test.php page, но игнорирует возвращаемый результат.</p>
<pre class="brush: jscript;">$.get(&quot;test.php&quot;, { name: &quot;Vasya&quot;, age: &quot;27&quot; } );</pre>
<p>Запрашивает test.php и передает дополнительные параметры, но также игнорирует возвращаемый результат.</p>
<pre class="brush: jscript;">$.get(&quot;test.php&quot;, function(data){
  alert(&quot;Данные загружены: &quot; + data);
});</pre>
<p>Передает результат запроса (без передачи параметров) к файлу test.php в alert (это может быть HTML или XML, зависит от того, что возвращает test.php).</p>
<pre class="brush: jscript;">$.get(&quot;test.php&quot;, { name: &quot;Vasya&quot;, age: &quot;27&quot; }, function(data){
  alert(&quot;Данные загружены: &quot; + data);
});</pre>
<p>Ну и полный набор: GET-запрос к файлу test.php с передачей каких-то параметров и возвращаемый результат передается в alert.</p>
<p><strong>jQuery.post( url, [data], [callback], [type] )</strong> &#8211; загружает страницу, используя POST-запрос. Все почти точно так же, как и в предыдущем случае, поэтому даже примеров приводить не буду. Обращу Ваше внимание разве что на еще один опциональный параметр &#8211; <strong>[type]</strong>. В нем можно определить тип передаваемых данных &#8211; JSON, XML и т.п.</p>
<p><strong>jQuery.getJSON( url, [data], [callback] )</strong> &#8211; загружает данные в формате JSON используя GET-запрос. Начиная с версии jQuery 1.2 Вы можете загружать данные в формате JSON, расположенные на другом домене. Пример загрузки фотографий с тэгом cat с <a href="http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&amp;tagmode=any&amp;format=json">Flickr</a> <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/">JSONP</a> API.<br />
<iframe src="http://www.linkexchanger.su/example_jquery_ajax/getjson.html" style="border: medium none " width="420" height="190"></iframe></p>
<blockquote><p>Вы можете скачать <a href="http://www.linkexchanger.su/example_jquery_ajax/getjson.zip">исходный код</a> примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.</p></blockquote>
<p><strong>jQuery.getScript( url, [callback] )</strong> &#8211; загружает и выполняет JavaScript файлы, используя GET запрос. Начиная с версии jQuery 1.2 Вы можете загружать и выполнять JavaScript файлы с любого домена.</p>
<p>Вот пример:<br />
<iframe src="http://www.linkexchanger.su/example_jquery_ajax/getscript.html" style="border: medium none " width="420" height="140"></iframe></p>
<blockquote><p>Вы можете скачать <a href="http://www.linkexchanger.su/example_jquery_ajax/getscript.zip">исходный код</a> примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.</p></blockquote>
<p>Мы загрузили и можем выполнить файл <strong>jquery.color.js</strong> &#8211; официальный jQuery Color Animation плагин.</p>
<p><strong>jQuery.ajax( options )</strong> &#8211; загружает страницу используя HTTP запрос. <strong>$.ajax()</strong> принимает один аргумент &#8211; объект, состоящий из пар ключ/значение, которые использует, чтобы инициализировать и обработать ajax-запрос. Ниже приведен список возможных значений.</p>
<blockquote><p>Использование именно этой вспомогательной функции считается хорошим стилем, поскольку все остальные функции ($.get, $.post и т.п.) в конечном итоге используют именно $.ajax(options).</p></blockquote>
<p><strong>async</strong> &#8211; по умолчанию все запросы выполняются в асинхронном режиме (значение <strong>true</strong>). Если необходимо выполнить синхронный запрос, следует установить значение <strong>false</strong> для этой опции. Помните, что синхронный запрос может временно заблокировать браузер, запретив любые действия во время выполнения запроса.</p>
<p><strong>beforeSend</strong> &#8211; может содержать функцию, которая должна быть вызвана до передачи запроса. beforeSend &#8211; это Ajax Event (события рассмотрены в другой статье).</p>
<p><strong>cache</strong> &#8211; опция добавлена в jQuery 1.2. По умолчанию &#8211; <strong>true</strong>. Если установить в <strong>false</strong>, запрашиваемая страница не будет кэшироваться браузером.</p>
<p><strong>complete</strong> &#8211; определяет функцию, которая будет вызвана по окончанию запроса (успешного и ошибочного выполнения). Принимает два аргумента: объект XMLHttpRequest и строку, описывающую &laquo;успешность&raquo; запроса. <strong>complete</strong> &#8211; это Ajax Event (события рассмотрены в другой статье).</p>
<p><strong>contentType</strong> &#8211; при передаче данных серверу сообщает content-type. По умолчанию &#8211; application/x-www-form-urlencoded.</p>
<p><strong>data</strong> &#8211; данные, передаваемые на сервер. Могут быть объектом или строкой. Конвертируются в строку запроса, если уже не представляют собой строку. Добавляются в URL GET-запроса. Если используется объект, он должен представлять собой пары ключ/значение. Если значения представлены в виде массива, jQuery сериализует значения с некоторым ключом. Например: {foo:["bar1", "bar2"]} будет представлено как &laquo;&amp;foo=bar1&amp;foo=bar2&#8243;.</p>
<p><strong>dataType</strong> &#8211; строка, описывает тип данных, которые ожидаются в качестве ответа сервера. Если не определена, то jQuery сам попытается определить тип, основываясь на MIME-типе ответа сервера. Доступные типы:<br />
- <strong>xml</strong>: вернет XML документ, который может быть обработан через jQuery.<br />
- <strong>html</strong>: вернет HTML как plain text.<br />
- <strong>script</strong>: расценивает ответ как JavaScript и возвращает его как plain text.<br />
- <strong>json</strong>: расценивает ответ как данные в формате JSON и возвращает JavaScript объект.<br />
- <strong>jsonp</strong>: загружает данные в формате JSON используя <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/">JSONP</a>. Необходимо дополнительно добавить &laquo;?callback=?&raquo; в конец строки запроса в URL, чтобы определить вызов. (Добавлено в jQuery 1.2).<br />
- <strong>text</strong>: строка plain text.</p>
<p><strong>error</strong> &#8211; определяет функцию, которая будет вызвана в случае неуспешного выполнения запроса.</p>
<p><strong>global</strong> &#8211; <strong>true</strong> или <strong>false</strong>. Вызывать или нет глобальные обработчики событий Ajax для этого запроса. Может быть использована для контроля различных Ajax событий. По умолчанию &#8211; <strong>true</strong>.</p>
<p><strong>ifModified</strong> &#8211; запрос будет успешным только в случае, если данные ответа изменились со времени последнего запроса. По умолчанию &#8211; <strong>false</strong>.</p>
<p><strong>processData</strong> &#8211; по умолчанию <strong>true</strong>. В опции <strong>data</strong> данные представлены в виде объекта, который преобразуется в строку запроса, подходящую для content-type по умолчанию &#8211; &laquo;application/x-www-form-urlencoded&raquo;. Если необходимо иное, установите опцию <strong>processData</strong> в <strong>false</strong>.</p>
<p><strong>success</strong> &#8211; указывается функция, которая будет вызвана в случае успешного завершения запроса. Функция принимает два аргумента: данные, возвращенные с сервера и отформатированные с учетом параметра <strong>dataType</strong> и строка, описывающая статус ответа.</p>
<p><strong>timeout</strong> &#8211; устанавливает локальный тайм-аут для запроса в миллисекундах. Отменяет глобальный тайм-аут для этого запроса, если тот определен через <strong>$.ajaxSetup</strong>.</p>
<p><strong>type</strong> &#8211; тип запроса, POST или GET. По умолчанию установлен GET. Типы запроса PUT или DELETE тоже могут быть использованы, но они поддерживаются не всеми браузерами.</p>
<p><strong>url</strong> &#8211; просто url запроса.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/34.html/feed</wfw:commentRss>
		<slash:comments>141</slash:comments>
		</item>
	</channel>
</rss>

