<?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>Уроки PHP, Mootools, JavaScript, ActionScript, HTML, CSS &#187; jQuery</title>
	<atom:link href="http://php.infoniac.ru/tag/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://php.infoniac.ru</link>
	<description>Уроки программирования от новичка новичкам</description>
	<lastBuildDate>Thu, 09 Feb 2012 11:09:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Поиск RegExp в документе, с последующей отправкой данных на сервер</title>
		<link>http://php.infoniac.ru/kak-ya-iskal-regexp-v-dokumente.html</link>
		<comments>http://php.infoniac.ru/kak-ya-iskal-regexp-v-dokumente.html#comments</comments>
		<pubDate>Tue, 23 Mar 2010 09:37:30 +0000</pubDate>
		<dc:creator>proglammer</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Mootools]]></category>
		<category><![CDATA[RegExp]]></category>
		<category><![CDATA[практические задачи]]></category>
		<category><![CDATA[регулярные выражения]]></category>

		<guid isPermaLink="false">http://php.infoniac.ru/?p=639</guid>
		<description><![CDATA[Недавно мой очень хороший знакомый попросил меня написать небольшой скрипт, который бы мог находить на загружаемой странице сайта определенное регулярное выражение и записывать вхождение в базу данных на сервере. Как только я услышал задачу, понял, что без AJAX тут никак. Пока с AJAXом у меня очень посредственные отношения: я написал только один полускрипт, который состоял [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>Недавно мой очень хороший знакомый попросил меня написать небольшой скрипт, который бы мог находить на загружаемой странице сайта определенное регулярное выражение и записывать вхождение в базу данных на сервере. Как только я услышал задачу, понял, что без AJAX тут никак. <span id="more-639"></span>Пока с AJAXом у меня очень посредственные отношения: я написал только один полускрипт, который состоял в том, что при выборе категории товара на сайте подгружались подкатегории и товары этой супер категории, а при выборе подкатегории, выбирались товары только этой одной подкатегории и все это было выполнено в виде выпадающих списков &lt;input type=&#8221;option&#8221;&gt;&#8230; Итак, тот первый полускрипт я написал на чистом JavaScript с помощью XMLHttpRequest (XHR) и, конечно же, не без помощи w3school.org.</p>
<p>В этой задаче мне пришлось также столкнуться с объектом RegExp JavaScript. Я немного потренировался в его использовании, что, несомненно пошло мне на пользу. Например, я узнал, что для того, чтобы использовать РегЭксп-ы, не обязательно объявлять переменную, новый экземпляр объекта RegExp, а можно просто записать регулярное выражение в виде текcтовой строки, т.е. вместо</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> r <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Regexp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.*'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'g'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>можно просто написать вот так:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> r <span style="color: #339933;">=</span> <span style="color: #3366CC;">'/.*/g'</span><span style="color: #339933;">;</span></pre></div></div>

<p>Но, обратите внимание, что при использовании конструкции new RegExp использовать обратные слэши не нужно, т.к. при работе с регулярным выражением, объявленным таким образом, обработчик сам добавит недостающие символы. Также, в этом примере видно, что ключи к РегЭксп-у идут отдельным параметром к объекту, тогда как при составлении выражения в текстовой строке, ключ просто добавляется в конце регулярного выражения. В общем, если регулярное выражение просо записывается в строку, то и составляется оно по всем правилам составления регулярных выражений.</p>
<p>Ключ &#8216;g&#8217; говорит обработчику, что не нужно останавливаться после первого вхождения регулярного выражения, а нужно искать по всему тексту, но простого указания этого ключа, как оказалось, совсем не достаточно.</p>
<p>В отличие от РНР, где функция preg_match_all записывает все вхождения в массив самостоятельно, для того, чтобы проделать тоже самое в JavaScript мне пришлось ускорить седение волос на голове:) Оказалось, что для поиска всех вхождений в документе с помощью JavaScript, нужно написать код такого плана:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">r <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.*text-([0-9]+).*'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'g'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
res <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>res <span style="color: #339933;">=</span> r.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> r.<span style="color: #660066;">lastIndex</span><span style="color: #339933;">;</span>
	<span style="color: #006600; font-style: italic;">// сюда вставляем код, который должен выполняться при нахождении регулярного выражения</span>
	<span style="color: #006600; font-style: italic;">// это может быть запить найденного в переменную или ещё что-нибудь</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>где <em>res</em> – массив в который записываются результаты поиска, где, в свою очередь, <em>res[<span style="color:red;">0</span>]</em> будет содержать вхождение всего регулярного выражения, <em>res[<span style="color:red;">1</span>]</em> будет содержать вхождение в первой группе скобок, <em>res[<span style="color:red;">2</span>]</em> – во второй и т.д.<br />
<em>r</em> – экземпляр регулярного выражения;<br />
<em>exec()</em> – метод объекта RegExp, который находит вхождения, соответствующие регулярному выражению и записывает их в массив. <em>exec()</em> отличается от <em>test()</em> тем, что записывает данные в массив, тогда как <em>test()</em> просто возвращает true если находит вхождение или false если не находит. Если же предпочитаете работать не с объектом, а с текстовой строкой, которая содержит РегЭксп, то используйте обычные методы match() – аналог exec(), или search() – почти аналог test(), с тем отличием, что возвращает позицию начала вхождения.</p>
<p>Тут потребуется небольшая оговорка по поводу использования search(): так как он возвращает число, а не булев тип (true/false), при отсутствии вхождения этот метод возвращает -1.</p>
<p>Кстати, при использовании просто текстовой строки для хранения РегЭксп-а, можно также использовать метод replace(), который находит вхождение регулярного выражения, или обычного текста, и заменяет на указанный в параметре текст.</p>
<p>Идем далее: <em>s</em> – источник поиска, т.е. где будем искать.<br />
<em>.lastIndex</em> – параметр, отвечающий за позицию, где было найдено последнее вхождение. Если этот параметр не указать, обработчик JavaScript найдет только первое вхождение, даже при указании ключа &#8216;g&#8217;.</p>
<p>Далее, часть Ajax. На сайте этого моего товарища уже были подключены Prototype и jQuery, потому, я решил не подключать еще и Mootools к этому салату (вначале думал подключить, так как только с ним и знаком). Решил просто посмотреть документацию по этим библиотекам, чтобы понять, какой из них лучше воспользоваться для составления пакета и отправки на скрипт сервера. Оказалось, что проще, чем это предлагает сделать jQuery, не получится!</p>

<div class="wp_syntax"><div class="code"><pre class="jquery" style="font-family:monospace;"><span style="color: #000066;">$</span>.<span style="color: #000066;">post</span><span style="color: #009900;">&#40;</span>ServerSideScriptUrl<span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>var1<span style="color: #339933;">:</span>value1<span style="color: #339933;">,</span> val2<span style="color: #339933;">:</span>val2 ...<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>Как видно из этого, вообще ничего проще нет. Спасибо jQuery!! Знакомый до боли селектор из Mootools $, потом указываем метод отправки – get/post, и несколько параметров. Конечно, в моем скрипте, требовалось лишь отправить данные, без их последующего приема, потому мне именно вариант jQuery показался самым простым. К сожалению, массивы с данными через XHR отправить не получится, но форма передачи данных на сервер, указанная выше, вполне справится с задачей передачи вполне большого объема данных.</p>
<p>Думаю, на этом и хватит описывать мой героический скрипт <img src='http://php.infoniac.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  РНР скрипт на стороне сервера даже описывать не буду, т.к. это скрипт на уровне первого класса (выполнен, тоже на уровне первого класса): получил данные, подключился к БД, записал в таблицу. Всё!</p>
<p>Конечно, это не большое достижение, но, все-таки – достижение. А тот факт, что я это все описал в этом посте, еще больше закрепит эти знания в моем прогламмерском мозгу.</p>
<p>Кстати, на фоне моего поста, посвященного первой решенной практической задачке, объявляю акцию:</p>
<blockquote style="color:red; font-size:14px; font-weight:bold;"><p>Если вы учитесь программированию и решаете какие-либо задачи, присылайте их мне, буду их с удовольствием публиковать на рассмотрение всех посетителей блога. Думаю, они будут интересны не только мне!</p></blockquote>
<p>Удачи!</p>
<p style="font-style:italic">P.S. Ух! Сколько ж раз я повторяю это слово в своих постах&#8230; со счета сбился&#8230; Но, КСТАТИ! Мой следующий урок Mootools посвещается именно работе с регулярными выражениями, так что НЕ пропустите!</p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://php.infoniac.ru/kak-ya-iskal-regexp-v-dokumente.html/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>AJAX. С чем это едят?</title>
		<link>http://php.infoniac.ru/ajax.html</link>
		<comments>http://php.infoniac.ru/ajax.html#comments</comments>
		<pubDate>Fri, 10 Oct 2008 04:41:32 +0000</pubDate>
		<dc:creator>proglammer</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://php.infoniac.ru/?p=41</guid>
		<description><![CDATA[Если вы каким-то чудом ещё не знаете что такое AJAX то вы пришли по адресу. Простыми словами можно сформулировать так: AJAX &#8211; это когда с помощью JavaScript можно запрашивать и получать данные с сервера не перезагружая станицу сайта. Основные библиотеки позволяющие использовать технологию AJAX: Prototype и(или) JQuery. Листинг 1. подключение библиотек prototype, jquery: &#60;script type=&#34;text/javascript&#34; [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>Если вы каким-то чудом ещё не знаете что такое AJAX то вы пришли по адресу.</p>
<p>Простыми словами можно сформулировать так: AJAX &#8211; это когда с помощью JavaScript можно запрашивать и получать данные с сервера не перезагружая станицу сайта.</p>
<p>Основные библиотеки позволяющие использовать технологию AJAX: Prototype и(или) JQuery.</p>
<p><span id="more-41"></span></p>
<p><strong>Листинг 1. подключение библиотек prototype, jquery:</strong>
</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;prototype.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
// и(или)
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;jquery.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></pre></div></div>

<p><strong>Jquery</strong> &#8211; это вообще полезная вещь, так как данная библиотека предлагает разработчику большое количество методов для манипуляции элементами документа и их свойствами и позволяет находить простые и изящные решения для, казалось бы, сложных задач.</p>
<p>
<strong>Примеры:</strong>
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//prototype</span>
<span style="color: #000000; font-weight: bold;">new</span> Ajax<span style="color: #339933;">.</span>Request<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'some.php'</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#123;</span>
	method<span style="color: #339933;">:</span> <span style="color: #0000ff;">'get'</span><span style="color: #339933;">,</span>
	onSuccess<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span> transport <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">var</span> responseStr <span style="color: #339933;">=</span> transport<span style="color: #339933;">.</span>responseText <span style="color: #339933;">||</span> <span style="color: #0000ff;">&quot;Пусто...&quot;</span><span style="color: #339933;">;</span>
		alert<span style="color: #009900;">&#40;</span> responseStr <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
	onFailure<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		alert<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Ошибка...'</span> <span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #666666; font-style: italic;">//jquery</span>
$<span style="color: #339933;">.</span>ajax<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
  type<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;POST&quot;</span><span style="color: #339933;">,</span>
  url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;some.php&quot;</span><span style="color: #339933;">,</span>
  data<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;name=John&amp;amp;location=Boston&quot;</span><span style="color: #339933;">,</span>
  success<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    alert<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;Data Saved: &quot;</span> <span style="color: #339933;">+</span> msg <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// или</span>
$<span style="color: #339933;">.</span>get<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;test.cgi&quot;</span><span style="color: #339933;">,</span>
  <span style="color: #009900;">&#123;</span> name<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;John&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">time</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;2pm&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
  <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    alert<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Data Loaded: &quot;</span> <span style="color: #339933;">+</span> data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// ну или</span>
$<span style="color: #339933;">.</span>post<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;test.cgi&quot;</span><span style="color: #339933;">,</span>
  <span style="color: #009900;">&#123;</span> name<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;John&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">time</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;2pm&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
  <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    alert<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Data Loaded: &quot;</span> <span style="color: #339933;">+</span> data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Полезнее всего использовать AJAX для улучшения юзабилити в таких приложениях как голосование, корзина, букмарки (..да, много всего) ну и в CMS. Наполнять страницу контентом нужно традиционно, статически, а вот всякий &#8220;мусор&#8221; типа декора или счётчиков подгружать динамически с применением AJAX.
</p>
<p>
Изначально сайт нужно разрабатывать без применения AJAX, а потом вкручивать его как дополнение. Посетители не использующие JS смогут без ошибок просматривать сайт, ну и нельзя забывать про индексацию страниц поисковиками. Со всеми своими плюсами AJAX легко может оказать негативное влияние на СЕО.
</p>
<p>
<strong>Ссылочки:</strong>
</p>
<ul>
<li><a href="http://ru.wikibooks.org/wiki/AJAX">AJAX Материал из Викиучебника</a></li>
</ul>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://php.infoniac.ru/ajax.html/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

