<?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>Code.ge Blog &#187; Ajax</title>
	<atom:link href="http://www.code.ge/posts/tag/ajax/feed" rel="self" type="application/rss+xml" />
	<link>http://www.code.ge</link>
	<description>ბლოგი ვებ პროგრამირებისა და ტექნოლოგიების შესახებ</description>
	<lastBuildDate>Fri, 03 Dec 2010 12:05:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.2</generator>
		<item>
		<title>jQuery &#8211; მორიგი დიდი აღიარება 2</title>
		<link>http://www.code.ge/posts/jquery-%e1%83%9b%e1%83%9d%e1%83%a0%e1%83%98%e1%83%92%e1%83%98-%e1%83%93%e1%83%98%e1%83%93%e1%83%98-%e1%83%90%e1%83%a6%e1%83%98%e1%83%90%e1%83%a0%e1%83%94%e1%83%91%e1%83%90-2</link>
		<comments>http://www.code.ge/posts/jquery-%e1%83%9b%e1%83%9d%e1%83%a0%e1%83%98%e1%83%92%e1%83%98-%e1%83%93%e1%83%98%e1%83%93%e1%83%98-%e1%83%90%e1%83%a6%e1%83%98%e1%83%90%e1%83%a0%e1%83%94%e1%83%91%e1%83%90-2#comments</comments>
		<pubDate>Mon, 29 Sep 2008 05:59:23 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=148</guid>
		<description><![CDATA[თითქმის ერთი წელი გავიდა მას შემდეგ რაც jQuery &#8211; ს დიდ აღიარებაზე დავპოსტე. ამ JavaScript ბიბლიოთეკას ჩემი ადვოკატობა ნამდვილად არ ესაჭიროება, მაგრამ, ამჯერად მისი აღიარების ძალიან მნიშვნელოვან ფაქტს აქვს ადგილი და არ შემიძლია არ დავწერო jQuery &#8211; ს ოფიციალურ ბლოგზე ბოლო პოსტი ამ ღირსშესანიშნავ მოვლენას ეძღვნება: jQuery, Microsoft, and Nokia Microsoft თავის ცნობილ ASP.NET Ajax [...]]]></description>
			<content:encoded><![CDATA[<p>თითქმის ერთი წელი გავიდა მას შემდეგ რაც <a href="http://www.code.ge/javascript/jquery-მორიგი-დიდი-აღიარება">jQuery &#8211; ს დიდ აღიარებაზე დავპოსტე</a>. ამ JavaScript ბიბლიოთეკას ჩემი ადვოკატობა ნამდვილად არ ესაჭიროება, მაგრამ, ამჯერად მისი აღიარების ძალიან მნიშვნელოვან ფაქტს აქვს ადგილი და არ შემიძლია არ დავწერო <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>jQuery &#8211; ს ოფიციალურ ბლოგზე ბოლო პოსტი ამ ღირსშესანიშნავ მოვლენას ეძღვნება: <a href="http://jquery.com/blog/2008/09/28/jquery-microsoft-nokia/">jQuery, Microsoft, and Nokia</a></p>
<p>Microsoft თავის ცნობილ <a href="http://www.asp.net/ajax/">ASP.NET Ajax</a> ფრეიმვორკს სწორედ jQuery &#8211; თი გააფართოვებს და იგი გავრცელდება ვიჟუალ სტუდიოსთან ერთად. Nokia კი თავის <a href="http://www.s60.com/life/thisiss60/s60indetail/technologiesandfeatures/webruntime">Web Run-Time</a> &#8211; ს გაამდიდრებს ამ ბიბლიოთეკით.</p>
<p>ასევე ამ თემას ეხება და ძალიან საინტერესოა GWTQuery(jQuery &#8211; ის მსგავსი იმპლემენტაცია) რომელიც GWT &#8211; ს ბოლო რელიზის პრეზენტაციის დროს აშკარად აქცენტირებული იყო <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>მანამდე რომ YUI &#8211; შიც დაამატეს ე.წ &#8220;query selector&#8221; &#8211; ის იმპლემენტაცია მაგაზე აღარაფერს ვამბობ&#8230; მთავარი ერთია, რომ ის მიდგომა რომელიც შეიმუშავა ჯონ რეზიგმა, დომინანტი აღმოჩნდა დღევანდელ JavaScript ბიბლიოთეკების გადატვირთულ ბაზარზე. არადა როგორ მწარედ მახსოვს რამდენჯერ მიკამათია მწარედ როგორც .Net &#8211; ის, ასევე GWT &#8211; სა და YUI &#8211; ს თაყვანისმცემლებთან jQuery &#8211; ის უპირატესობაზე&#8230; მაგრამ უშედეგოდ <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  თუმცა როგორც იტყვიან აღდგომა და ხვალეო, დრომ ყველაფერი დაამტკიცა და თავის ადგილზე დააყენა&#8230; </p>
<p>Long Live jQuery <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/jquery-%e1%83%9b%e1%83%9d%e1%83%a0%e1%83%98%e1%83%92%e1%83%98-%e1%83%93%e1%83%98%e1%83%93%e1%83%98-%e1%83%90%e1%83%a6%e1%83%98%e1%83%90%e1%83%a0%e1%83%94%e1%83%91%e1%83%90-2/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Ajax: HTML ფორმის სერიალიზაცია POST რიქვესტისთვის</title>
		<link>http://www.code.ge/posts/ajax-html-%e1%83%a4%e1%83%9d%e1%83%a0%e1%83%9b%e1%83%98%e1%83%a1-%e1%83%a1%e1%83%94%e1%83%a0%e1%83%98%e1%83%90%e1%83%9a%e1%83%98%e1%83%96%e1%83%90%e1%83%aa%e1%83%98%e1%83%90-post-%e1%83%a0%e1%83%98</link>
		<comments>http://www.code.ge/posts/ajax-html-%e1%83%a4%e1%83%9d%e1%83%a0%e1%83%9b%e1%83%98%e1%83%a1-%e1%83%a1%e1%83%94%e1%83%a0%e1%83%98%e1%83%90%e1%83%9a%e1%83%98%e1%83%96%e1%83%90%e1%83%aa%e1%83%98%e1%83%90-post-%e1%83%a0%e1%83%98#comments</comments>
		<pubDate>Wed, 05 Dec 2007 08:10:44 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.code.ge/javascript/ajax-html-%e1%83%a4%e1%83%9d%e1%83%a0%e1%83%9b%e1%83%98%e1%83%a1-%e1%83%a1%e1%83%94%e1%83%a0%e1%83%98%e1%83%90%e1%83%9a%e1%83%98%e1%83%96%e1%83%90%e1%83%aa%e1%83%98%e1%83%90-post-%e1%83%a0%e1%83%98</guid>
		<description><![CDATA[ვაგრძელებ სერიალიზაციის თემას, და ამჯერად შევეხები HTML ფორმის სერიალიზაციას. HTML ფორმის სერიალიზაციაში იგულისხმება მისი ველების სახელებისა და მნიშვნელობების ჩვეულებრივ პარამეტრი/მნიშვნელობა(parameter/value) სტრიქონში გადაყვანა. ეს ფორმატი ყველასთვის კარგად არის ცნობილი და მას აქვს ტრადიცულად შემდეგი სახე: param1=value1&#038;param2=value2&#038;param3=value3 ანუ პარამეტრი/მნიშვნელობა წყვილების ერთობლიობა, სადაც წყვილის გამოყოფად გამოიყენება &#38; სიმბოლო. რა საჭიროა ფორმის ველებისა და მნიშნველობების ასეთი ფორმატში გადაყვანა? ეს [...]]]></description>
			<content:encoded><![CDATA[<p>ვაგრძელებ სერიალიზაციის თემას, და ამჯერად შევეხები HTML ფორმის სერიალიზაციას. HTML ფორმის სერიალიზაციაში იგულისხმება მისი ველების სახელებისა და მნიშვნელობების ჩვეულებრივ პარამეტრი/მნიშვნელობა(parameter/value) სტრიქონში გადაყვანა. ეს ფორმატი ყველასთვის კარგად არის ცნობილი და მას აქვს ტრადიცულად შემდეგი სახე:</p>
<pre>
param1=value1&#038;param2=value2&#038;param3=value3
</pre>
<p>ანუ პარამეტრი/მნიშვნელობა წყვილების ერთობლიობა, სადაც წყვილის გამოყოფად გამოიყენება &amp; სიმბოლო. </p>
<p>რა საჭიროა ფორმის ველებისა და მნიშნველობების ასეთი ფორმატში გადაყვანა? ეს მნიშვნელოვანი და აუცილებელია  <strong>XMLHttpRequest (XHR)</strong> კონტექსტში. ცნობილია რომ ე.წ. &#8220;Ajax&#8221; აპლიკაციებში ფართოდ სწორედ ეს ობიექტი გამოიყენება, და უშუალოდ მისი მეშვეობით ხორციელდება ასინქრონული რიქვესტები(მოთხოვნები?) სერვერზე. გამომდინარე იქედან რომ XHR სერვერვთან კომუნიკაციისათვის იყენებს ჩვეულებრივ HTTP პროტოკოლს, მისი მეშვეობით სევერზე მონაცემების გაგზავნა შეგვიძლია ტრადიციულად ან POST ან GET მეთოდით. </p>
<p>ცნობილია რომ GET მეთოდის გამოყენება რეკომენდირებულია ისეთ შემთხვევაში, როდესაც სერვერზე გასაგზავნი ინფორმაცია არის ძალიან მცირე. რადგან ამ მეთოდის გამოყენებისას სერვერზე გასაგზავნი ყველა პარამეტრი იგზავნება URI &#8211; ს მეშვეობით ცხადია რომ გარკვეული შეზღუდვა ინფორმაციის ზომაზე არსებობს.</p>
<p>რაც შეეხება POST მეთოდს, იგი გამოიყენება ისეთ შემთხვევაში როდესაც სერვერზე გასაგზავნი ინფორმაციის ოდენობა არის დიდი. გამომდინარე იქედან რომ GET მეთოდისაგან განსხვავებით ამ ინფორმაციის გაგზავნა სერვერზე ხდება არა URI &#8211; ს მეშვეობით არამედ ის იდება უშუალოდ HTTP &#8211; ს ტანში ეს შეზღუდვა გარკვეულწილად იხსენბა. </p>
<p>ტრადიციული გზით(იგულისხმება XHR &#8211; ის გარეშე) ფორმის სერვერზე გაგზავნის შემთხვევაში ზემოთთქმული ხორციელდება ავტომატურად, ბრაუზერის მიერ. თუმცა XHR &#8211; ს მსგავსი რამ არ შეუძლია და ასეთ შემთხვევაში პარამეტრების შესაბამისი მომზადება და ობიექტის მეთოდებისათვის მათი გადაცემის პასუხისმგელობა მთლიანად პროგრამისტს ეკისრება.<span id="more-104"></span></p>
<p>GET მეთოდის შემთხვევაში ეს არ წარმოადგენს პრობლემას, ზემოთ მოხსენიებული მიზეზის გამო და ასეთი URI &#8211; ს აწყობა საკმაოდ მარტივია თუნდაც პრიმიტიული ხელოვნური მეთოდით. მაგრამ POST მეთოდის გამოყენების შემთხვევაში საქმე ოდნავ უფრო რთულად არის. როგორც ზემოთ აღვნიშნე XHR &#8211; ში ფორმის ელემენტების HTTP ტანში ჩადება ავტომატურად არ ხდება&#8230; ამისათვის საჭიროა 1) ფორმის ყველა ელემენტისაგან ჯერ ავაწყოთ &amp; სიმბოლოთი გაყოფილი პარამეტრი/მნიშვნელობა ტიპის სტრიქონი; 2) XHR &#8211; ის <strong>send</strong> მეთოდს გადავცეთ ეს სტრიქონი პარამეტრად.</p>
<p>ეს ყველაფერი საკმაოდ მარტივია და დროა შევუდგეთ პრობლემის რეალურად გადაჭრას.</p>
<p><strong><br />
ფორმის სერიალიზაციისათვის საკმარისია ქვემოთ მოყვანილი JavaScript ფუნქციის გამოყენება, რომელიც პარამეტრად ღებულობს ფორმას, მისი ველების საფუძველზე აწყობს პარამეტრი/მნიშნველობა ტიპის სტრიქონს და აბრუნებს მას:</strong></p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">function</span> formToParams<span style="color: #009900;">&#40;</span>form<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> fld<span style="color: #339933;">,</span> type<span style="color: #339933;">,</span> params <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> encode <span style="color: #339933;">=</span> encodeURIComponent<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>form .<span style="color: #660066;">elements</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>form.<span style="color: #660066;">elements</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fld <span style="color: #339933;">=</span> form.<span style="color: #660066;">elements</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> type <span style="color: #339933;">=</span> fld.<span style="color: #660066;">type</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^checkbox|radio$/i</span>.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>type<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>fld.<span style="color: #660066;">checked</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; params.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>fld.<span style="color: #000066;">name</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;=&quot;</span> <span style="color: #339933;">+</span> encode<span style="color: #009900;">&#40;</span>fld.<span style="color: #660066;">value</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>type <span style="color: #339933;">==</span> <span style="color: #3366CC;">'select-one'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; params.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>fld.<span style="color: #000066;">name</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;=&quot;</span> <span style="color: #339933;">+</span> encode<span style="color: #009900;">&#40;</span>fld.<span style="color: #660066;">value</span> <span style="color: #339933;">||</span> fld.<span style="color: #660066;">options</span><span style="color: #009900;">&#91;</span>fld.<span style="color: #660066;">selectedIndex</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>type <span style="color: #339933;">==</span> <span style="color: #3366CC;">'select-multiple'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> opts <span style="color: #339933;">=</span> fld.<span style="color: #660066;">options</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> j<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> j<span style="color: #339933;">&lt;</span>opts.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>opts<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">selected</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; params.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>fld.<span style="color: #000066;">name</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;=&quot;</span> <span style="color: #339933;">+</span> encode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>opts<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">getAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;value&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> opts<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!/^</span>button<span style="color: #339933;">|</span>reset<span style="color: #339933;">|</span>file<span style="color: #339933;">|</span>undefined$<span style="color: #339933;">/</span>i.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>type<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; params.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>fld.<span style="color: #000066;">name</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;=&quot;</span> <span style="color: #339933;">+</span> encode<span style="color: #009900;">&#40;</span>fld.<span style="color: #660066;">value</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> params.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&amp;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ამ პატარ ფუნქციის მეშვეობით უკვე შესაძლებელია ნებისმიერი ფორმის სერიალიზაცია, საკმარისია მას გადავცეთ მხოლოდ ჩვენთვის სასურველი HTML ფორმის ობიექტი. ერთადერთი მნიშვნელოვანი დეტალი აქ არის <strong>encodeURIComponent</strong> ფუნქციის გამოყენება, რომლის მეშვეობითაც ხდება მნიშვნელობის ე.წ. კოდირება(?). ეს აუცილებელია რათა არ მოხდეს მნიშვნელობების დამახინჯება.</p>
<p><strong>შემდეგ ეტაპზე საჭიროა მეთოდი რომელიც XHR &#8211; ის მეშვეობით სასურველ მისამართზე გაგზავნის სერიალიზებულ ფორმას:</strong></p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">function</span> doRequest<span style="color: #009900;">&#40;</span>config<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> req <span style="color: #339933;">=</span> window.<span style="color: #660066;">XMLHttpRequest</span> <span style="color: #339933;">?</span> <span style="color: #003366; font-weight: bold;">new</span> XMLHttpRequest<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> ActiveXObject<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Microsoft.XMLHTTP&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; req.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span>config.<span style="color: #660066;">method</span><span style="color: #339933;">,</span> config.<span style="color: #660066;">url</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; req.<span style="color: #660066;">onreadystatechange</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; config.<span style="color: #660066;">callback</span><span style="color: #009900;">&#40;</span>req<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; req.<span style="color: #660066;">setRequestHeader</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;content-type&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;application/x-www-form-urlencoded&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; req.<span style="color: #660066;">send</span><span style="color: #009900;">&#40;</span>config.<span style="color: #660066;">params</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> &nbsp; &nbsp; &nbsp; &nbsp;<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ეს ფუნქცია პარამეტრად ღებულობს ერთ config ობიექტს. რომელსაც შესაძლებელია გააჩნდეს მსგავსი სახე:</p>
<pre>
{
    method: 'POST',
    url: 'http://mydomain.com/actionurl.php',
    params: 'param1=value1&#038;param2=value2',
    callback: function(req) {
        if (req.readyState == 4 &#038;&#038; req.status == 200) {
            //do something with result
        }
    }
}
</pre>
<p>კონფიგურაციის ობიექტი ძალიან მარტივია. მას აქვს შემდეგი თვისებები: </p>
<ul>
<li>method &#8211; სასურველი HTTP მეთოდი;</li>
<li>url &#8211; მისამართი რომელზეც გვსურს ინფორმაციის გაგზავნა;</li>
<li>params &#8211; პარამეტრი/მნიშვნელობა ტიპის სტრიქონი სტრიქონი;</li>
<li>callback &#8211; ფუნქცია რომელიც ავტომატურად იქნება გამოძახებული XHR ობიექტის <strong>onreadystatechange </strong>ხდომილების დროს;</li>
</ul>
<p>რაც შეეხება ამ ფუნქციების გამოყენების რეალურ მაგალითს მას შესაძლებელია ჰქონდეს მსგავსი სახე:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">function</span> test<span style="color: #009900;">&#40;</span>button<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> params <span style="color: #339933;">=</span> formToParams<span style="color: #009900;">&#40;</span>button.<span style="color: #660066;">form</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'result'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> params<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; doRequest<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; method<span style="color: #339933;">:</span> button.<span style="color: #660066;">form</span>.<span style="color: #660066;">method</span><span style="color: #339933;">,</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; url<span style="color: #339933;">:</span> button.<span style="color: #660066;">form</span>.<span style="color: #660066;">action</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'?nocache='</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; params<span style="color: #339933;">:</span> params<span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; callback<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>req<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>req.<span style="color: #660066;">readyState</span> <span style="color: #339933;">==</span> 4 <span style="color: #339933;">&amp;&amp;</span> req.<span style="color: #000066;">status</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">200</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//do something here</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ამ ფუნქციას პარამეტრად გადაეცემა ჩვეულებრივი button ტიპის input ელემენტი. ეს ელემენტი ფლობს საჭირო ინფორმაციას ფორმის შესახებ. ხოლო ფორმას თავის მხრივ გააჩნია საკმაო ინფორმაცია(method, action ატრიბუტები) იმისათვის რომ ავაწყოთ პარამეტრების ობიექტი. ამ ფუნქციაში ყურადღებას იმსახურებს url პარამეტრის მნიშვნელობის აგება. ფორმის action ატრიბუტის მნიშვნელობას ვამატებთ nocache პარამეტრს რომლის მნიშვნელობაც არის მიმდინარე დრო. ეს აუცილებელია იმისათვის რათა IE &#8211; ში თავიდან ავირიდოთ კეშირება.</p>
<p>ამ ფუნქციებისა და ინფორმაციის მეშვეობით ძალიან მარტივია რეალური მუშა მაგალითის აგება სადაც დავინახავთ რეალურ შედეგს, თუმცა მანამდე შეგიძლიათ ნახოთ <a href="http://www.code.ge/samples/formtoparams.htm">ამ პოსტისათვის შექმნილი რეალური მუშა მაგალითი</a> და დააკოპიროთ მისი კოდი.</p>
<p>ამ მაგლითისათვის სერვერის მხარეს გამოიყენება ერთი PHP ფაილი რომელშიც გამოყენებულია ქვემოთ მოყვანილი კოდი:</p>
<div class="codecolorer-container php blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;pre&gt;'</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/print_r"><span style="color: #990000;">print_r</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/pre&gt;'</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>enjoy <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/ajax-html-%e1%83%a4%e1%83%9d%e1%83%a0%e1%83%9b%e1%83%98%e1%83%a1-%e1%83%a1%e1%83%94%e1%83%a0%e1%83%98%e1%83%90%e1%83%9a%e1%83%98%e1%83%96%e1%83%90%e1%83%aa%e1%83%98%e1%83%90-post-%e1%83%a0%e1%83%98/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>JavaScript: ობიექტის JSON სერიალიზაცია</title>
		<link>http://www.code.ge/posts/javascript-object-to-json-serialization</link>
		<comments>http://www.code.ge/posts/javascript-object-to-json-serialization#comments</comments>
		<pubDate>Tue, 04 Dec 2007 10:26:42 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.code.ge/javascript/javascript-object-to-json-serialization</guid>
		<description><![CDATA[JSON (JavaScript Object Notation) &#8211; ნოტაცია დღესდღეობით ფართოდ გამოყენებადი და ძალიან მოხერხებული საშუალებაა ინფორმაციის გაცვლისათვის. გამომდინარე იქედან რომ იგი არის ჩვეულებრივი სტრიქონი, იგი არ არის დამოკიდებული არც ენაზე და არც პლატფორმაზე. JSON თანაბარი წარმატებით გამოიყენება ისეთი მაღალი დონის ენებში როგორიც არის: Java, PHP, Ruby, C#, JavaScript და ა.შ. გარდა ამისა იგი არის ერთერთი შეუცვლელი ნაწილი [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.json.org/">JSON (JavaScript Object Notation)</a> &#8211; ნოტაცია დღესდღეობით ფართოდ გამოყენებადი და ძალიან მოხერხებული საშუალებაა ინფორმაციის გაცვლისათვის. გამომდინარე იქედან რომ იგი არის ჩვეულებრივი სტრიქონი, იგი არ არის დამოკიდებული არც ენაზე და არც პლატფორმაზე.</p>
<p>JSON თანაბარი წარმატებით გამოიყენება ისეთი მაღალი დონის ენებში როგორიც არის: Java, PHP, Ruby, C#, JavaScript და ა.შ. გარდა ამისა იგი არის ერთერთი შეუცვლელი ნაწილი თანამედროვე Ajax აპლიკაციებისა და ფართოდ გამოიყენება კლიენტსა და სერვერს შორის ინფორმაციის მიმოცვლისათვის.<span id="more-103"></span></p>
<p><strong><br />
პრობლემა</strong></p>
<p>მიუხედავად იმისა რომ JSON &#8211; ს საფუძვლად უდევს JavaScript ობიექტი, ამ ენას არ გააჩნია არანაირი საშუალება იმისათვის რომ ობიექტი გარდაქმნას JSON სტრიქონად. ბუნებრივია ეს აუცილებელია რადგან პირდაპირ JavaScript ობიექტის გაგზავნა/მიღება http პროტოკოლის მეშვეობით შეუძლებელია. გაგზავნისათვის საჭიროა ამ ობიექტის სერიალიზაცია(ანუ სტრიქონულ ფორმატში გადაყვანა, ხოლო მიღების დროს JSON სტრიქონის, უკან JavaScript ობიექტში გადაყვანა. </p>
<p>JSON სტრიქონის გადაყვანა ობიექტში, ძალიან მარტივია. ამისათვის საკმარისია JavaScript &#8211; ის eval ფუნქციის გამოყენება და გამზადებული ობიექტი ხელთ გვაქვს. თუმცა ობიექტის ხელახალი სერიალიზაცია JSON &#8211; ში ასეთი მარტივი არ არის.</p>
<p><strong><br />
გამოსავალი</strong></p>
<p>იმისათვის რომ მოვახდინოთ ობიექტის სერიალიზაცია შესაძლებელია გამოვიყენოთ ქვემოთ მოყვანილი გზებიდან ერთერთი.</p>
<p>მაგალითში გამოყენებული იქნება შემდეგი სახის ობიექტი:</p>
<pre>
var myObj = {
    id: 'some-unique-id',
    name: 'obj-name',
    values: [1, 2, true, false, null, 'some string'],
    nested: {
        name: 'nested obj name',
        value: {name: 'other nested obj'}
    }
}
</pre>
<ul>
<li><strong>JSON სტრიქონის ხელოვნურად აწყობა</strong>
<p>ასეთ შემთხვევაში, როდესაც საქმე გვაქვს მარტივ ობიექტთან, მისი ხელოვნური გზით სერიალიზაცია დიდ პრობლემას არ წარმოადგენს&#8230; თუმცა ეს მაინც არასასიამოვნო პროცესია.</p>
<p>მაგალითად ზემოთ ნაჩვენები ობიექტის JSON სტრიქონად გარდაქმნისათვის საჭიროა მსგავსი მანიპულაციები:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> json <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
json.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'{id: &quot;'</span> <span style="color: #339933;">+</span> myObj.<span style="color: #660066;">id</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&quot;,'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
json.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'name: &quot;'</span> <span style="color: #339933;">+</span> myObj.<span style="color: #000066;">name</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&quot;,'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
json.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'values: ['</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> myObj.<span style="color: #660066;">values</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;json.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>myObj.<span style="color: #660066;">values</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">','</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>და ასე შემდეგ&#8230; რა თქმა უნდა ეს კოდი მოყვანილია პირობით მაგალითად თუ რა არის საჭირო ასეთ გზით JSON სტრიქონის ასაწყობად, და იგი ნათლად ასახავს თუ რამდენად არაეფექტური, შრომატევადი და რაც ყველაზე მნიშვნელოვანია შეცდომებისათვის განწირულია ასეთი მიდგომა.</p>
</li>
</li>
<li><strong>JSON სერიალიზაცია სპეციალური უნივერსალური მეთოდის მეშვეობით</strong><br />
განსხვავებით წინა მაგალითისგან, ეს გზა არის გამართლებული, რეკომენდირებული და ასეთი გზით შეცდომების დაშვების ალბათობა დადის მინიმუმზე. იმ შემთხვევაშიც კი თუ აღმოჩენილი იქნება სერიალიზაციის შეცდომა, მისი ძებნა მოგვიწევს მხოლოდ ერთ ადგილას, და მისი აღმოფხვრა აისახება მთლიან შედეგზე, რაც ნიშნავს იმას რომ დაშვებული შეცდომების ძებნა არ არის საჭირო ბევრ ადგილას რაც გარდაუვალი იქნებოდა ობიექტების სერიალიზაციის ზემოთ ნაჩვენები მიდგომის გამოყენების შემთხვევაში.</p>
<p>ობიექტის სერიალიზაციის კოდი:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">function</span> serialize<span style="color: #009900;">&#40;</span>o<span style="color: #339933;">,</span> l<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> res <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> tmp <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> l <span style="color: #339933;">=</span> l <span style="color: #339933;">||</span> 1<span style="color: #339933;">,</span> key<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> repeat <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>str<span style="color: #339933;">,</span> count<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> tmp <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> count<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>str<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> tmp.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> k <span style="color: #000066; font-weight: bold;">in</span> o<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; key <span style="color: #339933;">=</span> o.<span style="color: #660066;">constructor</span> <span style="color: #339933;">==</span> Object <span style="color: #339933;">?</span> k <span style="color: #339933;">+</span> <span style="color: #3366CC;">': '</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>o<span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> undefined<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>o<span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">constructor</span> <span style="color: #339933;">==</span> Object<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>repeat<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #339933;">,</span> l<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> key <span style="color: #339933;">+</span> serialize<span style="color: #009900;">&#40;</span>o<span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> l<span style="color: #339933;">+</span>1<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>o<span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">constructor</span> <span style="color: #339933;">==</span> Array<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>repeat<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #339933;">,</span> l<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> key <span style="color: #339933;">+</span> serialize<span style="color: #009900;">&#40;</span>o<span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> l<span style="color: #339933;">+</span>1<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>o<span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">constructor</span> <span style="color: #339933;">==</span> String<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>repeat<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #339933;">,</span> l<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> key <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&quot;'</span> <span style="color: #339933;">+</span> o<span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&quot;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>repeat<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #339933;">,</span> l<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> key <span style="color: #339933;">+</span> o<span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>o<span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span> <span style="color: #339933;">===</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>repeat<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #339933;">,</span> l<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> key <span style="color: #339933;">+</span> <span style="color: #3366CC;">'null'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; res.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>o.<span style="color: #660066;">constructor</span> <span style="color: #339933;">==</span> Object <span style="color: #339933;">?</span> <span style="color: #3366CC;">'{'</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">'['</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; res.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>tmp.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;,<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; res.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #339933;">+</span> repeat<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>l <span style="color: #339933;">-</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>o.<span style="color: #660066;">constructor</span> <span style="color: #339933;">==</span> Object <span style="color: #339933;">?</span> <span style="color: #3366CC;">'}'</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">']'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> res.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ამ ფუნქციის გამოყენება ძალიან მარტივია, და განსხვავებით წინა მაგალითისგან ობიექტის სერიალიზაციისათვის საკმარისია შემდეგი კოდი:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> json <span style="color: #339933;">=</span> serialize<span style="color: #009900;">&#40;</span>myObj<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #006600; font-style: italic;">//json ცვლადის მნიშნველობა არის სწორად ფორმირებული JSON სტრიქონი </span><br />
<span style="color: #006600; font-style: italic;">//რომლის გაგზავნაც შესაძლებელია სერვერზე.</span></div></td></tr></tbody></table></div>
<p>ნაჩვენები კოდი ძალიან მარტივია, იგი არის ჩვეულებრივი რეკურსიული ფუნქცია რომელიც იქცევა ობიექტის თვისებების მნიშვნელობების მიხედვით, საბოლოო ჯამში კი აბრუნებს სწორად ფორმირებულ JSON სტრიქონს. აღასანიშნავია ის რომ ამ მეთოდს შეგვიძლია გადავცეთ ნებისმიერი სირთულის ობიექტი, ხოლო შედეგად მივიღებთ JSON სტრიქონს. ასევე აღსანიშნავია რომ ეს მეთოდი სტრიქონის ფორმირებისათვის იყენებს ახალი ხაზის(\n)  და ტაბულაციის(\t) სიმბოლოებს, რაც მნიშვნელოვანია მიღებული შედეგის კითხვადობის თვალსაზრისით.</p>
</li>
</li>
</ul>
<p>რაც შეეხება დესერიალიზაციას JavaScript &#8211; ში, და სერიალიაზაცია/დესერიალიზაციას სერვერულ ენებში:</p>
<ul>
<li><strong>JavaScript</strong>
<pre>
//eval ფუნქციის გამოყენებით
var myObj = eval(jsonString);
</pre>
<p>თუმცა JavaScript &#8211; ში გაუგებრობების თავიდან ასაცილებლად, json სტრიქონის დესერიალიზაციისას მართებულია მოვიქცეთ შემდეგნაირად:</p>
<pre>
try {
    //სტრიქონი მოვაქციოთ ფრჩხილებში
    var myObj = eval('(' + jsonString + ')');
} catch(e) {
    //სხვა, შესაბამისი მოქმედებები
}
</pre>
<p>ამ შემთხვევაში ორი თავდაცვითი მექანიზმი გამოვიყენეთ: 1) JSON სტრიქონი მოვაქციეთ ფრჩხილებში; 2) კოდი შევასრულეთ try/catch ბლოკის შიგნით, რადგან თუ eval ფუნქციას გადავცემთ არაკორექტულ სტრიქონს მისი ობიექტად გარდაქმნა ვერ მოხერხდება რაც გამოიწვევს შეცდომას, ხოლო try/catch ბლოკი ამ შემთხვევაში საუკეთესო გამოსავალია შესაძლო გაუმართავობის სწორად დასამუშავებლად;</p>
</li>
<li><strong>PHP</strong>
<pre>
//PHP5 - ს აქვს ორი შესაბამისი ფუნქცია
//სერიალიზაცია
$arr = array('key1'=>'value2', 'key2'=>'value2');
$json = json_encode($arr);
//დესერიალიზაცია
$deserialized = json_decode($json);
</pre>
</li>
</ul>
<p>სხვადასხვა ენებში არსებობს შესაბამისი ბიბლიოთეკები JSON მანიპულაციისათვის, და მათი გამოყენება ისეთივე მარტივია როგორც ზემოთ ნაჩვენები მაგალითები.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/javascript-object-to-json-serialization/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>&#8220;Ajax upload&#8221; &amp; XML response</title>
		<link>http://www.code.ge/posts/ajax-upload-and-xml-response</link>
		<comments>http://www.code.ge/posts/ajax-upload-and-xml-response#comments</comments>
		<pubDate>Tue, 22 May 2007 13:44:48 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[IE Sucks]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JavaScript DOM]]></category>

		<guid isPermaLink="false">http://www.code.ge/javascript/ajax-upload-and-xml-response</guid>
		<description><![CDATA[&#8220;Ajax upload&#8221; ანუ ფაილის ატვირთვა სერვერზე Ajax მიდგომით როგორც ასეთი მითია და სინამდვილეში არავითარი Ajax upload არ არსებობს გამომდინარე იქედან რომ ფაილის ატვირთვა სერვერზე სინამდვილეში არ ხდება XMLHttpRequest(XHR) ობიექტის გამოყენებით(და ეს შეუძლებელია ამ მომენტისათვის), ნაცვლად ამისა ამ ამოცანის გადასაჭრელად გამოიყენება დამალული iframe ელემენტი რაც ქმნის შესაბამის ილუზიას რომ ფაილის ატვირთვა ხდება ე.წ. &#8220;Ajax&#8221; მეთოდით. დღესდღეობით [...]]]></description>
			<content:encoded><![CDATA[<p><strong>&#8220;Ajax upload&#8221;</strong> ანუ ფაილის ატვირთვა სერვერზე Ajax მიდგომით როგორც ასეთი მითია და სინამდვილეში არავითარი <strong>Ajax upload</strong> არ არსებობს გამომდინარე იქედან რომ ფაილის ატვირთვა სერვერზე სინამდვილეში არ ხდება XMLHttpRequest(XHR) ობიექტის გამოყენებით(და ეს შეუძლებელია ამ მომენტისათვის), ნაცვლად ამისა ამ ამოცანის გადასაჭრელად გამოიყენება დამალული <strong>iframe</strong> ელემენტი რაც ქმნის შესაბამის ილუზიას რომ ფაილის ატვირთვა ხდება ე.წ. <strong>&#8220;Ajax&#8221;</strong> მეთოდით.</p>
<p>დღესდღეობით ეს გამოსავალი ერთადერთია და რაც ყველაზე მნიშვნელოვანია იგი მუშაობს და მუშაობს ძალიან კარგად, თუმცა არსებობს ერთი დეტალი რომელიც საკმაოდ პრობლემატურია. პრობლემა მდგომარეობს სერვერიდან დაბრუნებულ პასუხში(response).<br />
<span id="more-61"></span></p>
<p>Ajax აპლიკაციის შექმნის ერთერთი აუცილებელი პირობაა სწორედ XHR ობიექტის გამოყენება. აღნიშნული ობიექტის მუშაობა არაფრით განსხვავდება ბრაუზერის მუშაობისგან, მისი მოვალეობაა სერვერზე მოთხოვნის გაგზავნა და შესაბამისად პასუხის მიღება. სერვერიდან დაბრუნებული პასუხი შეიძლება იყოს სამ ძირითად ფორმატში. ესენია:</p>
<ol>
<li>
<strong>ჩვეულებრივ ტექსტი(plain text):</strong> ძირითადად გამოიყენება შედარებით მარტივ შემთხვევებში და სწრაფი რეზულტატის მისაღწევად;</li>
<li><strong>სწორად ფორმირებული XML დოკუმენტი:</strong> გამოიყენება სერვერიდან კომპლექსური პასუხების დასაბრუნებლად, პასუხი წარმოადგენს XHR ობიექტს responseXML თვისების მნიშვნელობას და იგი არის გამზადებული  DOM ობიექტი რომელთან მუშაობაც თავისუფლად შესაძლებელია JavaScript &#8211; ის  DOM მეთოდების მეშვეობით;</li>
<li><strong>Java Script Object Notation(JSON) ფორმატი:</strong> ასევე გამოიყენება კომპლექსურ შემთხვევებში და ეს ფორმატი წარმოადგენს გამზადებულ JavaScrip ობიექტს;</li>
</ol>
<p>სამივე ჩამოთვლილ ფორმატს გააჩნია თავისი უპირატესობები და უარყოფითი მხარეები. XML  და JSON ფორმატს შორის არჩევანი ალბათ უფრო გემოვნების საკითხია და უმარავი მომხრე და მოწინააღმდეგე ჰყავს ამ ორივე ფორმატს, მე პირადად XML ფორმატის გამოყენების მომხრე ვარ და მიდმივად ამ ფორმატით ვმუშაობ.</p>
<p>რაში გამოიხატება პრობლემა? როდესაც მოთხოვნა/პასუხი მთლიანად მუშავდება XHR ობიექტის გამოყენებით ყველაფერი ბუნებრივად და კარგად მუშაობს თუმცა როდესაც საჭიროა ისეთი HTML ფორმის გამოყენება რომლის მეშვეობითაც უნდა მოხდეს ფაილების ატვირთვა სერვერზე XHR გამოუყენებელი ხდება და იძულებული ვხდებით გამოვიყენოთ iframe ელემენტი. iframe &#8211; ს გამოყენების შემთხვევაში სერვერიდან პასუხი უნდა დაბრუნდეს HTML ფორმატში ნაცვლად ფორმირებული XML დოკუმენტისა, ეს აუცილებელია რადგან წინააღმდეგ შემთხვევაში ვერ შევძლებთ დაბრუნებული პასუხის კონტროლს(მე პირადად სხვა გზას ვერ მივაგენი). ჩამოტვირთული HTML დოკუმენტის გაკონტროლება კი ძალიან მარტივია, თუმცა აქ სხვა პრობლემას ვაწყდებით, კერძოდ კი HTML დოკუმენტში XML დოკუმენტის ჩაშენება არ შეიძლება(IE &#8211; ს გააჩნია მსგავსი შესაძლებლობა ე.წ. XML islands, მაგრამ სხვა ბრაუზერებში მსგავსი რამ არ მუშაობს). ერთადერთი გამოსავალია რომ სერვერიდან HTML &#8211; სთან ერთად დავაბრუნოთ XML დოკუმენტი მხოლოდ სტრიქონის სახით.</p>
<p><strong><br />
სტრიქონიდან XML დოკუმენტის მიღება</strong></p>
<p>დავუშვათ XHR ობიექტის გამოყენების შემთხვევაში პასუხი  სერვერიდან ბრუნდება მსგავსი XML დოკუმენტის სახით:</p>
<pre>
&lt;response&gt;
    &lt;item&gt;&lt;![CDATA[This Is data]]&gt;&lt;/item&gt;
&lt;/response&gt;
</pre>
<p>ასეთ შემთხვევაში დაბრუნებული პასუხი გამზადებულ DOM ობიექტია და მასთან მუშაობა პირდაპირ შესაძლებელია შესაბამისი მეთოდების გამოყენებით. ხოლო iframe &#8211; ს გამოყენების შემთხვევაში სერვერიდან იგივე XML დოკუმენტის დაბრუნება გვიწევს შემდეგი სახით:</p>
<div class="codecolorer-container html4strict blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">head</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">head</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">body</span></a>&gt;</span>&nbsp; <br />
&nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;response&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #ddbb00;">&amp;lt;</span>response<span style="color: #ddbb00;">&amp;gt;&amp;lt;</span>item<span style="color: #ddbb00;">&amp;gt;&amp;lt;</span>![CDATA[This Is data]]<span style="color: #ddbb00;">&amp;gt;&amp;lt;</span>/item<span style="color: #ddbb00;">&amp;gt;&amp;lt;</span>/response<span style="color: #ddbb00;">&amp;gt;</span><br />
&nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">body</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>ეს არის ჩვეულებრივი HTML დოკუმენტი რომელსაც გააჩნია ერთი div ელემენტი იდენტიფიკატორით response. სწორედ მასშია მოთავსებული XML დოკუმენტი, თუმცა განსხვავებით ზემოთ ნაჩვენები XML დოკუმენტისგან მასში არსებული ტეგის გამხსნელი &lt; და დამხური &gt; სიმბოლოები გარდაქმნიალია შესაბამის &amp;lt; და &amp;gt; სიმბოლოებში რათა თავიდან ავიცილოთ გაუგებრობები.</p>
<p>ამ სტრიქონის წაკითხვა და გარდაქმნა შესაბამისად XML დოკუმენტში შესაძლებელია შემდეგი JavaScript &#8211; ის მეშვეობით:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">/*<br />
&nbsp;*put this code after &quot;response&quot; div<br />
&nbsp;*/</span><br />
<br />
<span style="color: #006600; font-style: italic;">//dom object</span><br />
<span style="color: #003366; font-weight: bold;">var</span> dom <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #006600; font-style: italic;">//retrive string from &quot;response&quot; element</span><br />
<span style="color: #003366; font-weight: bold;">var</span> content <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'response'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerHTML</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #006600; font-style: italic;">//replace &amp;lt; and &amp;gt; back to &nbsp;&lt;&gt; symbols</span><br />
content <span style="color: #339933;">=</span> content.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/&amp;lt;/gi</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'&lt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
content <span style="color: #339933;">=</span> content.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/&amp;gt;/gi</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #006600; font-style: italic;">//if current browser is IE ( :D )</span><br />
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">ActiveXObject</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; dom <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> ActiveXObject<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Microsoft.XMLDOM&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; dom.<span style="color: #660066;">async</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span><br />
&nbsp; dom.<span style="color: #660066;">loadXML</span><span style="color: #009900;">&#40;</span>content<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">//all other browsers</span><br />
&nbsp; <span style="color: #003366; font-weight: bold;">var</span> parser <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> DOMParser<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; dom <span style="color: #339933;">=</span> parser.<span style="color: #660066;">parseFromString</span><span style="color: #009900;">&#40;</span>content<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;text/xml&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #006600; font-style: italic;">//read document element into response variable</span><br />
<span style="color: #003366; font-weight: bold;">var</span> response <span style="color: #339933;">=</span> dom.<span style="color: #660066;">documentElement</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #006600; font-style: italic;">//retrive first element from document and alert it's tag name</span><br />
<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>response.<span style="color: #660066;">firstChild</span>.<span style="color: #660066;">tagName</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>ამ ჯავასკრიპტ კოდის ჩასმა(და დაბრუნება) შესაძლებელია ზემოთ ნაჩვნებ HTML დოკუმენტთან ერთად&#8230; მისი მუშაობის დეტალები მითითებულია კოდის კომენტარებში.</p>
<p>ეს მიდგომა კრიტიკულად მნიშვნელოვანია ისეთ შემთხვევებში როდესაც საჭიროა სერვერიდან მიღებული პასუხის დამუშავება ერთი სტანდარტული გზით, და იგი თავიდან გვაცილებს ყოველი ცალკეული შემთხვევებისათვის ახალი ე.წ. Response Processor &#8211; ების წერის აუცილებლობას.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/ajax-upload-and-xml-response/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

