<?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>jQueryTips by Tee++; &#187; Ajax</title>
	<atom:link href="http://www.jquerytips.com/category/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jquerytips.com</link>
	<description>Coding is fun.</description>
	<lastBuildDate>Sun, 25 Apr 2010 11:30:33 +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>มาทำ Autosave กันเถอะ jQuery Ajax ช่วยได้</title>
		<link>http://www.jquerytips.com/2009/03/27/autosave-jquery-ajax/</link>
		<comments>http://www.jquerytips.com/2009/03/27/autosave-jquery-ajax/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 17:43:17 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=347</guid>
		<description><![CDATA[มาอัพเดทต่อๆ วันนี้จริงๆว่าจะนอนแล้วล่ะ เหนื่อยๆ ง่วงๆ เพลียๆ มึนๆ ยังไงชอบกล แต่เอาว่า อยากได้ keyword &#8220;AJAX&#8221; ก็ต้องขยันอัพกันนิดนึง เพราะผมเชื่อในเรื่อง Content is the King เลย พยายมๆ สร้าง Unique Content ที่มีคุณภาพขึ้นมา ^^
วันนี้เราลองมาประยุกต์ใช้ ajax ในการทำ auto save ดีกว่า จริงๆ plugin แบบนี้ ถ้าหาดูจาก Google ก็จะเห็นอยู่ 2-3 ตัว มีทั้งแบบ save ลง Cookie หรือ ส่งไปทำงานตาม url ที่เรากำหนด พร้อม function restore มาเสร็จสรรพ
แต่เนื่องจากวันนี้ผมไม่ได้มา review แต่จะมาอธิบายถึง การประยุกต์ใช้งาน ajax ใน jQuery [...]]]></description>
			<content:encoded><![CDATA[<p>มาอัพเดทต่อๆ วันนี้จริงๆว่าจะนอนแล้วล่ะ เหนื่อยๆ ง่วงๆ เพลียๆ มึนๆ ยังไงชอบกล แต่เอาว่า อยากได้ keyword &#8220;<strong>AJAX</strong>&#8221; ก็ต้องขยันอัพกันนิดนึง เพราะผมเชื่อในเรื่อง Content is the King เลย พยายมๆ สร้าง Unique Content ที่มีคุณภาพขึ้นมา ^^</p>
<p>วันนี้เราลองมาประยุกต์ใช้ ajax ในการทำ auto save ดีกว่า จริงๆ plugin แบบนี้ ถ้าหาดูจาก Google ก็จะเห็นอยู่ 2-3 ตัว มีทั้งแบบ save ลง Cookie หรือ ส่งไปทำงานตาม url ที่เรากำหนด พร้อม function restore มาเสร็จสรรพ</p>
<p>แต่เนื่องจากวันนี้ผมไม่ได้มา review แต่จะมาอธิบายถึง การประยุกต์ใช้งาน ajax ใน jQuery กัน เลยจะขอลองเขียน plugin แบบ simple ขึ้นมาใช้งานเองกัน เอาแบบง่ายๆ พอเป็นพิธีก็พอ<span id="more-347"></span></p>
<p>การทำ Autosave นั้น ก็คือการส่งข้อมูลไป save เป็นระยะๆ ทั้งๆ ที่เรายังไม่ได้กด save เลย โดยการทำแบบนี้ ก็มีข้อดีของมันดังนี้ครับ</p>
<p>1. ช่วยให้ข้อมูล ไม่หายในกรณี ไฟดับ คอมแฮงค์ หรือปัญหาที่ เรียกได้ว่าเป็น อุบัติเหตุ ทางเทคนิค</p>
<p>2. ช่วยเรื่อง session timeout ในกรณีที่ set timeout ของช่วงเวลา login</p>
<p>3. เท่ห์ &#8230;.</p>
<p>เอาล่ะ ทีนี้เรามาลองเขียน plugin ง่ายๆกัน สักตัวนึง</p>
<p><span style="color: #800000;"><strong>File: autosave.jquerytips.js</strong></span></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">jQuery.<span class="me1">extend</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; autosave: <span class="kw2">function</span><span class="br0">&#40;</span>s<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> defaults = <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; form: <span class="st0">&#8216;#myform&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; delay: <span class="nu0">10000</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; calback: <span class="st0">&#8221;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> options = jQuery.<span class="me1">extend</span><span class="br0">&#40;</span>defaults, s<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">save</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; save: <span class="kw2">function</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setInterval<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> eml = document.<span class="me1">createElement</span><span class="br0">&#40;</span><span class="st0">&#8216;div&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jQuery<span class="br0">&#40;</span>eml<span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8216;id&#8217;</span>, <span class="st0">&#8217;status&#8217;</span><span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; position: <span class="st0">&#8216;absolute&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background: <span class="st0">&#8216;red&#8217;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color: <span class="st0">&#8216;white&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padding: <span class="st0">&#8216;3px 10px&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font: <span class="st0">&#8216;12px verdana&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; top: jQuery<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">scrollTop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; right: <span class="nu0">0</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span><span class="st0">&#8217;saved&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jQuery<span class="br0">&#40;</span><span class="st0">&#8216;body&#8217;</span><span class="br0">&#41;</span>.<span class="me1">prepend</span><span class="br0">&#40;</span>eml<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> urlPost = jQuery<span class="br0">&#40;</span>i.<span class="me1">form</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8216;action&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> params = jQuery<span class="br0">&#40;</span>i.<span class="me1">form</span><span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;input, textarea, select&#8217;</span><span class="br0">&#41;</span>.<span class="me1">serialize</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jQuery.<span class="me1">ajax</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; url: urlPost,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: <span class="st0">&#8216;POST&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data: params,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; success: <span class="kw2">function</span><span class="br0">&#40;</span>rs<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setTimeout<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> jQuery<span class="br0">&#40;</span><span class="st0">&#8216;#status&#8217;</span><span class="br0">&#41;</span>.<span class="me1">remove</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#125;</span>, <span class="nu0">2000</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i.<span class="me1">callback</span><span class="br0">&#40;</span>rs<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>, i.<span class="me1">delay</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>จากที่เห็น plugin จะทำงานแบบนี้ครับ คือรับ parameter เข้ามากำหนดค่า ดังนี้<br />
form = id ของ Form ที่เราต้องการทำงานด้วย<br />
delay = ช่วงหน่วงเวลาของการ save แต่ระครั้ง (inteval)<br />
callback = ค่าที่จะ return กลับไปจากไฟล์ปลายทาง</p>
<p>คำสั่งหลักๆ จะอยู่ที่ method save ครับ โดยเริ่มต้นจาก การ set inteval ตามช่วงเวลาหน่วง และ ตกแต่งให้สวยงาม โดยการทำ label save ให้แสดงผล ที่บนขวา ของหน้าจอ </p>
<p>จากนั้นก็จะหา action ของ form มาด้วย </p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> urlPost = jQuery<span class="br0">&#40;</span>i.<span class="me1">form</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8216;action&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>หาค่าทั้งหมดของ input มา serialize ด้วยคำสั่ง</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> params = jQuery<span class="br0">&#40;</span>i.<span class="me1">form</span><span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;input, textarea, select&#8217;</span><span class="br0">&#41;</span>.<span class="me1">serialize</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>แล้วก็ส่งให้ ajax ทำงาน สุดท้ายส่งค่าอะไรก็ตามที่ ไฟล์ save ส่งมาคืนให้กับ callback</p>
<p><span style="color: #800000;"><strong>File: sample.html</strong></span></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;html&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;title&gt;jQueryTips.com&lt;/title&gt;
</div>
</li>
<li class="li2">
<div class="de2">&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;script src=&quot;autosave.jquerytips.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;script type=&quot;text/javascript&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;!&#8211;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; $(function() {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.autosave({
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; form: &#8216;#autosave&#8217;,
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; delay: 10000,
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; callback: function(data) {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alert( data );
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; });
</div>
</li>
<li class="li1">
<div class="de1">//&#8211;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;body&gt;
</div>
</li>
<li class="li2">
<div class="de2">&lt;p style=&quot;height:500px;&quot;&gt;&lt;/p&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;form method=&quot;post&quot; action=&quot;save.php&quot; id=&quot;autosave&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;fieldset&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;legend&gt;Auto Save Plugin by jQueryTips.com&lt;/legend&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &lt;p&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Field 1&lt;/label&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;text&quot; name=&quot;field_1&quot; value=&quot;&quot; /&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/p&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;p&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Field 2&lt;/label&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;textarea name=&quot;field_2&quot;&gt;&lt;/textarea&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/p&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;p&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Field 3&lt;/label&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;select name=&quot;field_3&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option value=&quot;a&quot;&gt;A&lt;/option&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option value=&quot;b&quot;&gt;B&lt;/option&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option value=&quot;c&quot;&gt;C&lt;/option&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/select&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/p&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;p&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Field 4&lt;/label&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;radio&quot; name=&quot;field_4&quot; value=&quot;yes&quot; /&gt; Yes
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;radio&quot; name=&quot;field_4&quot; value=&quot;no&quot; /&gt; No
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/p&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Field 5&lt;/label&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;checkbox&quot; name=&quot;field_5&quot; value=&quot;agree&quot; /&gt; Agree
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/p&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;p&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;submit&quot; value=&quot;Save&quot; /&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/p&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/fieldset&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/form&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&lt;/body&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/html&gt;</div>
</li>
</ol>
</div>
<p>ส่วนนี้คือวิธีเรียกใช้งานครับ โดยระบุ parameters ไป คือ form, delay, callback (data ที่ return กลับมา จะเอามาทำอะไรต่อก็ตามแต่)</p>
<p><strong>เท่านี้ก็เป็นอันเสร็จ</strong></p>
<p><strong>ส่วนการใช้งานในเรื่องของ save นั้นเราอาจจะทำได้แบบนี้ครับ</strong><br />
ส่งค่าเป็นเก็บลง DB จริงๆ เลย แต่ว่าทำ status เท่ากับ draft ไว้จากนั้นส่ง lnsert id กลับมา แล้วให้ callback append input hidden ของ id ลงไปใน เอกสาร HTML </p>
<p>หรือใครอาจจะเอาไปใช้แบบอื่นก็ได้นะครับ เช่นลองเก็บแบบ temporary เช่น memcached, apc, session, cookie, file อะไรก็ตามแต่จะไปคิดกัน </p>
<p>วันนี้พอแค่นี้ล่ะ บายๆ </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2009/03/27/autosave-jquery-ajax/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>มาคุยกันเรื่อง Ajax อีกที ดีกว่ามั้ย?</title>
		<link>http://www.jquerytips.com/2009/03/24/jquery-ajax-again/</link>
		<comments>http://www.jquerytips.com/2009/03/24/jquery-ajax-again/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 15:00:04 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=318</guid>
		<description><![CDATA[หลังจากประสบความสำเร็จ กับ 2 keywords หลัก jQuery และ codeigniter ในผลการค้นหาจาก Google ในหน้าภาษาไทย โดยได้อันดับที่ 1 และ 6 ตามลำดับ ตอนนี้จะขอมาเล่น keyword ต่อไป คือคำว่า &#8220;AJAX&#8221; ซึ่งตอนนี้ยังไม่มีตำแหน่งใดๆ เลย ฮ่าๆๆ
แต่ด้วยจำนวนคู่แข่งที่มีเพียง 375,000 เท่านั้นเอง เลยคิดว่า ไม่น่าจะยากเย็นอะไร โดยเป้าหมายไม่ได้หวัง ถึงอันดับ 1 ขอแค่หน้าแรกได้ก็ดีใจละ ดังนั้นเอาเป็นว่า บทความในวันนี้จะขอ พูดเรื่อง ajax เลยละกัน
หลายๆ คนที่ใช้ ajax ใน jQuery ก็คงจะรู้แล้วว่ามันง่ายแสนง่ายเพียง ไหน ไม่ต้องมาเสียเวลาเขียนโคด 30-40 บรรทัด เพียงแค่บรรทัดเดียวก็ วิ่งฉิว สบายใจเฉิบแล้ว
วันนี้ผมก็จะมาลองปรับแต่ง เพื่อ optimize การเขียนโคดอีกสักนิดนึงให้ performance โดยรวมของเว็บไซด์ ดีขึ้น [...]]]></description>
			<content:encoded><![CDATA[<p>หลังจากประสบความสำเร็จ กับ 2 keywords หลัก <a href="http://tinyurl.com/dldz6f" target="_blank"><strong><span style="color: #ff6600;">jQuery</span></strong></a> และ<span style="color: #ff6600;"> </span><strong><a href="http://tinyurl.com/cktywo" target="_blank"><span style="color: #ff6600;">codeigniter</span> </a></strong>ในผลการค้นหาจาก Google ในหน้าภาษาไทย โดยได้อันดับที่ 1 และ 6 ตามลำดับ ตอนนี้จะขอมาเล่น keyword ต่อไป คือคำว่า<strong> &#8220;AJAX&#8221;</strong> ซึ่งตอนนี้ยังไม่มีตำแหน่งใดๆ เลย ฮ่าๆๆ</p>
<p>แต่ด้วยจำนวนคู่แข่งที่มีเพียง <strong>375,000 </strong>เท่านั้นเอง เลยคิดว่า ไม่น่าจะยากเย็นอะไร โดยเป้าหมายไม่ได้หวัง ถึงอันดับ 1 ขอแค่หน้าแรกได้ก็ดีใจละ ดังนั้นเอาเป็นว่า บทความในวันนี้จะขอ พูดเรื่อง <strong>ajax </strong>เลยละกัน</p>
<p>หลายๆ คนที่ใช้ <strong>ajax</strong> ใน jQuery ก็คงจะรู้แล้วว่ามันง่ายแสนง่ายเพียง ไหน ไม่ต้องมาเสียเวลาเขียนโคด 30-40 บรรทัด เพียงแค่บรรทัดเดียวก็ วิ่งฉิว สบายใจเฉิบแล้ว<span id="more-318"></span></p>
<p>วันนี้ผมก็จะมาลองปรับแต่ง เพื่อ optimize การเขียนโคดอีกสักนิดนึงให้ performance โดยรวมของเว็บไซด์ ดีขึ้น เอาเป็นว่าวันนี้จะพูดถึงการใช้งาน <strong>ajax</strong> แล้วพักไว้ใน ตัวแปร เพื่อใช้งานต่อ ไปใน กรณีที่ ต้นทาง ไม่ได้มีข้อมูลที่เปลี่ยนไปตลอด ซึ่ง เทคนิค นี้ไม่ได้มีอะไรที่วุ่นวาย แล้วก็ไม่ได้ยากเย็นอะไร เพียงแต่ว่า บางคน อาจจะยังไม่รู้เท่านั้นเอง .ึ่งการ load data แบบนี้ พวก ไอ้หรั่งเรียกว่า &#8220;Loads data synchronously&#8221; ซึ่งมันตรงข้ามกับ asynchronously</p>
<p>บางคนอาจจะเคยเขียน<strong> jQuery Ajax</strong> ประมาณนี้</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;script type=<span class="st0">&quot;text/javascript&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> xmlRs = <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; $.<span class="me1">ajax</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;url: <span class="st0">&#8217;some.xml&#8217;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;success: <span class="kw2">function</span><span class="br0">&#40;</span>rs<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; xmlRs = rs</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw3">alert</span><span class="br0">&#40;</span> xmlRs <span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&lt;/script&gt;</div>
</li>
</ol>
</div>
<p>แล้วสงสัยว่า ทำไง var xmlRs ใช้ไม่ได้ทั้งๆ ที่ประกาศเป็นตัวแปร Global เรียบร้อยแล้ว</p>
<p>งานนี้ปัญหามีนิดเดียวเองครับ ก็คือ asynchronously มัน เป็น true อยู่ ที่ถูกต้องจะต้องเขียนแบบนี้ครับ</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;script type=<span class="st0">&quot;text/javascript&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> xmlRs = $.<span class="me1">ajax</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; async: <span class="kw2">false</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; url: <span class="st0">&#8217;some.xml&#8217;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;<span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">responseText</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw3">alert</span><span class="br0">&#40;</span> xmlRs <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&lt;/script&gt;</div>
</li>
</ol>
</div>
<p><em>และถ้าจะเอา var ที่ได้มา Find ต่อ เช่นหา node ของ xml ต้องแก้จาก responseText เป็น responseXML นะครับ ไม่งั้นมันจะมีปัญหากับ IE ตัวยุ่ง </em></p>
<p>เท่านี้ก็เป็นอันหมดปัญหา สบายๆ ลองกันดูนะครับ ^^</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2009/03/24/jquery-ajax-again/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://www.jquerytips.com/song/When-I-Come-Around.mp3" length="9143292" type="audio/mpeg" />
		</item>
		<item>
		<title>AjaxQ เรียงคิวให้ request กันหน่อย</title>
		<link>http://www.jquerytips.com/2009/03/14/jquery-ajax-q/</link>
		<comments>http://www.jquerytips.com/2009/03/14/jquery-ajax-q/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 10:42:42 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=266</guid>
		<description><![CDATA[วันนี้แวะมาล้างรถ ในระหว่างที่กำลังรอ ว่างๆ ก็เลยคิดว่าน่าจะม่ Update อะไรสักหน่อย เลย Search Keyword &#8220;jquery plugin&#8221; จาก Google ดูซิว่ามี อะไรพอจะหยิบยกมาเขียนได้
หลังจากลองสุ่มๆ ดูก็เจอ plugin ที่พอจะมีประโยชน์บ้างมาแนะนำกัน เผื่อใครที่กำลังเจอปัญหาเรื่องนี้พอดี
รู้มั้ยครับว่า Browser แต่ละตัวมันมี Limit ของ Connection Server กันด้วย โดยที่ Mozilla, Opera, Safari  มี limit อยู่ที่ 8 connections ต่อ 1 server ต่อ ช่วงเวลา หรือที่แล้วก็ไอ้ตัวเจ้าปัญหา IE มี limit อยู่ที่ 2 !!!!
ที่นี้มันก็อาจจะทำให้เกิดปัญหาได้โดยที่เค้าเรียกว่า การ flooding server (แปลเป็น TH ไม่ถูกจริงๆ)
ซึ่งที่ถูกจริงๆ แล้วในการ [...]]]></description>
			<content:encoded><![CDATA[<p>วันนี้แวะมาล้างรถ ในระหว่างที่กำลังรอ ว่างๆ ก็เลยคิดว่าน่าจะม่ Update อะไรสักหน่อย เลย Search Keyword &#8220;jquery plugin&#8221; จาก Google ดูซิว่ามี อะไรพอจะหยิบยกมาเขียนได้</p>
<p>หลังจากลองสุ่มๆ ดูก็เจอ plugin ที่พอจะมีประโยชน์บ้างมาแนะนำกัน เผื่อใครที่กำลังเจอปัญหาเรื่องนี้พอดี</p>
<p>รู้มั้ยครับว่า Browser แต่ละตัวมันมี Limit ของ Connection Server กันด้วย โดยที่ Mozilla, Opera, Safari  มี limit อยู่ที่ 8 connections ต่อ 1 server ต่อ ช่วงเวลา หรือที่แล้วก็ไอ้ตัวเจ้าปัญหา IE มี limit อยู่ที่ 2 !!!!<span id="more-266"></span></p>
<p>ที่นี้มันก็อาจจะทำให้เกิดปัญหาได้โดยที่เค้าเรียกว่า การ flooding server (แปลเป็น TH ไม่ถูกจริงๆ)</p>
<p>ซึ่งที่ถูกจริงๆ แล้วในการ Design AJAX Application จริงๆ การ request ควรจะเป็น 1:1 ดังนั้นสิ่งที่จะมาแก้ไขปัญหาก็คือ การทำ Ordering ให้กับ request นั่นเอง </p>
<p>ซึ่ง plugin ตัวที่ผมจะแนะนำนี้แก้ปัญหาให้ได้ครับ โดยแก้ไข Syntax การเรียกใช้งาน AJAX จาก jQuery นิดเดียว</p>
<p><strong>Example</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">$.<span class="me1">ajaxq</span> <span class="br0">&#40;</span><span class="st0">&quot;testqueue&quot;</span>, <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; url: <span class="st0">&quot;test_1.html&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; cache: <span class="kw2">false</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; success: <span class="kw2">function</span><span class="br0">&#40;</span>html<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#results&quot;</span><span class="br0">&#41;</span>.<span class="me1">append</span><span class="br0">&#40;</span>html<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">$.<span class="me1">ajaxq</span> <span class="br0">&#40;</span><span class="st0">&quot;testqueue&quot;</span>, <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; url: <span class="st0">&quot;test_2.html&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; cache: <span class="kw2">false</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; success: <span class="kw2">function</span><span class="br0">&#40;</span>html<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#results&quot;</span><span class="br0">&#41;</span>.<span class="me1">append</span><span class="br0">&#40;</span>html<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>เท่านี้เองครับ ซึ่งถ้าใครสนใจจะเอามาแก้ไขปัญหา หรือศึกษาเพิ่มเติมก็ไป Download กันได้ <a href="http://plugins.jquery.com/project/ajaxq"><strong>ที่นี่</strong></a> เลยครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2009/03/14/jquery-ajax-q/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>มา Translate กันเถอะ พี่ GG เค้าจัดมาแล้ว</title>
		<link>http://www.jquerytips.com/2009/03/06/jquery-with-gogole-translate/</link>
		<comments>http://www.jquerytips.com/2009/03/06/jquery-with-gogole-translate/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 16:36:05 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Others]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Gogole]]></category>
		<category><![CDATA[Jsonp]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=261</guid>
		<description><![CDATA[Google Translate
ว้าว ขณะที่ Post ข้อความอยู่นี้ เชื่อมั้ยครับว่าผมเขียนบทความ ลงใน jQueryTips นี้ทั้งหมดกี่บทความแล้ว 80 !!!!! ใช่แล้วตั้ง 80 แน่ะ รวมบทความนี้ก็จะเป็นบทความที่ 81 ไม่น่าเชื่อเลย ว่าตัวเองจะเขียนได้มาไกลถึงขนาดนี้ 555++ 
ตอนแรกก็กะเขียนเล่นๆ คิดว่า วัน สองวันตัวเอง คงเบื่อ ไปๆมาๆ นี่เขียนกันเป็นปีเลย อืมม์ คิดๆแล้วก็ ภูมิใจแฮะ วันนี้เดี๋ยว export มา backup ซะหน่อยดีกว่า ^^
เอาล่ะๆ มาเข้าเรื่องที่จะเขียนวันนี้กันเลยดีกว่า &#8220;ภาษาอังกฤษ&#8221; -*- เชื่อแน่ๆ เลยครับว่าปัญหาเรื่อง ภาษา ไม่แข็งแรงนั้น สั่งสมอยู่กับคนไทย มานานแสนนาน ทำให้เราขาดโอกาส และการเรียนรู้ที่ดีๆ จาก international website, e-book หรือสื่อ ภาษาต่างประเทศ อะไรต่อมิอะไรไปไม่ใช่น้อย
แต่ผมคิดว่า ต่อไปนี้ปัญหาอาจจะเบาบางลง ด้วยท่านเทพแห่งโลกไซเบอร์อย่างพี่ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jQueryTips.com/example/GTranslate/" target="_blank">Google Translate</a></p>
<p>ว้าว ขณะที่ Post ข้อความอยู่นี้ เชื่อมั้ยครับว่าผมเขียนบทความ ลงใน jQueryTips นี้ทั้งหมดกี่บทความแล้ว 80 !!!!! ใช่แล้วตั้ง 80 แน่ะ รวมบทความนี้ก็จะเป็นบทความที่ 81 ไม่น่าเชื่อเลย ว่าตัวเองจะเขียนได้มาไกลถึงขนาดนี้ 555++ </p>
<p>ตอนแรกก็กะเขียนเล่นๆ คิดว่า วัน สองวันตัวเอง คงเบื่อ ไปๆมาๆ นี่เขียนกันเป็นปีเลย อืมม์ คิดๆแล้วก็ ภูมิใจแฮะ วันนี้เดี๋ยว export มา backup ซะหน่อยดีกว่า ^^</p>
<p>เอาล่ะๆ มาเข้าเรื่องที่จะเขียนวันนี้กันเลยดีกว่า &#8220;ภาษาอังกฤษ&#8221; -*- เชื่อแน่ๆ เลยครับว่าปัญหาเรื่อง ภาษา ไม่แข็งแรงนั้น สั่งสมอยู่กับคนไทย มานานแสนนาน ทำให้เราขาดโอกาส และการเรียนรู้ที่ดีๆ จาก international website, e-book หรือสื่อ ภาษาต่างประเทศ อะไรต่อมิอะไรไปไม่ใช่น้อย</p>
<p>แต่ผมคิดว่า ต่อไปนี้ปัญหาอาจจะเบาบางลง ด้วยท่านเทพแห่งโลกไซเบอร์อย่างพี่ <a href="http://www.google.com">Big Google</a> เพราะตอนนี้ ท่านได้ออก Language Service ชุดของการ Translate ใน version th -> en, en -> th หรือ ภาษาอื่นๆ อีกเยอะแยะมาแล้ว<span id="more-261"></span></p>
<p>จะแปลทั้งเวบ หรือจะแปลเป็นประโยค ก็สะดวกสบาย รวดเร็ว ไปลองกันดูได้ ที่นี่ <a href="http://translate.google.co.th/">Google Translate</a></p>
<p>เห็นมั้ย เจ๋งโครต แต่ถ้าคิดว่าวันนี้ ผมจะมาแนะนำ Service แค่นี้ล่ะก็ ผิดถนัดครับ ผมมีอะไรๆ ทีเด็ดกว่านี้เยอะรอให้ไปอ่านกันอยู่แล้ว&#8230;&#8230;</p>
<p>รู้มั้ยครับว่า <a href="http://code.google.com/apis/ajaxlanguage/documentation/">Google AJAX Language</a> ก็มี <a href="http://code.google.com/apis/ajaxlanguage/documentation/">API</a> ด้วย ซึ่งการใช้งานก็โครตจะง่าย เพราะมันถูก plug เข้ามาอยู่ในชุดของ Google JS API แล้ว ทำให้เราเรียกโหลดมาจาก Google ได้เลย โดยไม่จำเป็นต้องมา include อะไรวุ่นวาย </p>
<p>ไม่เชื่อเอาโคดชุดนี้ไปรันดู</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;html&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;script type=&quot;text/javascript&quot; src=&quot;http://www.google.com/jsapi&quot;&gt;&lt;/script&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &lt;script type=&quot;text/javascript&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; google.load(&quot;language&quot;, &quot;1&quot;);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; function translate() {
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; var text = document.getElementById(&quot;text&quot;).innerHTML;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; google.language.detect(text, function(result) {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; if (!result.error &amp;&amp; result.language) {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; google.language.translate(text, result.language, &quot;en&quot;,
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; function(result) {
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var translated = document.getElementById(&quot;translation&quot;);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (result.translation) {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; translated.innerHTML = result.translation;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; }
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; });
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; }
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;/script&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &lt;/head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;body&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;div&gt;&lt;span id=&quot;text&quot;&gt;สวัสดี ชาวโลก&lt;/span&gt;&lt;input type=&quot;button&quot; value=&quot;translate&quot; onclick=&quot;translate()&quot; /&gt;&lt;/div&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;div id=&quot;translation&quot;&gt;&lt;/div&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;/body&gt;
</div>
</li>
<li class="li2">
<div class="de2">&lt;/html&gt;</div>
</li>
</ol>
</div>
<p>ซึ่งใน API ชุดนี้ของ GG จะประกอบไปด้วย สองส่วนหลักๆก็คือ<br />
1. Detect language<br />
ตัวนี้เป็นตัวตรวจสอบภาษาที่จะแปลครับ ว่าเป็นภาษาอะไร โดยเราไม่จำเป็นต้องบอก GG ว่าเรากำลังจะแปลจาก ภาษาอะไรเป็นภาษาอะไร โดยแค่เราส่ง กลุ่มที่จะแปลเข้าไป GG จะบอกมาเองว่าเรากำลังทำงานกับภาษาอะไร จะคืนค่าเป็น th, en, jp หรือ ภาษาอื่นๆ</p>
<p>2. Translate<br />
แน่นอนอีกตัวคือหัวใจครับ ตัวแปลนั่นเอง โดยตัวแปลนี้เราสามารถส่ง text เข้าไปแปล โดยต้องระบุ </p>
<p>text = ประโยคที่จะทำการแปล<br />
source = แปลจากภาษาอะไร เช่น en (ตรงนี้เราจะสามารถใช้ api ชุด detect lang ทำงานแทนได้)<br />
destination = แปลมาเป็นภาษาอะไร เช่น th</p>
<p>ซึ่งจากที่ผมเอา Firebug จับมา การทำงานของ API Google ชุดนี้ก็คือ JSONP นั่นเอง</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">http://www.google.com/uds/Gtranslate?callback=google.language.callbacks.id101&amp;context=22&amp;q=สวัสดีชาวโลก&amp;langpair=th|en&amp;key=notsupplied&amp;v=1.0</div>
</li>
</ol>
</div>
<p>เอาล่ะๆ ไอ้ที่บอกมาทั้งหมด มันแค่เกริ่นเท่านั้นเองอ่ะ ที่เป็นบทความวันนี้จริงๆ มันต้องเป็น jQuery แน่นอนอยู่แล้ว นี่ครับ</p>
<p><a href="http://sundaymorning.jaysalvat.com/">Sunday Morning jQuery Google Translate API</a></p>
<p>ซึ่งหน้าตาโดยรวมแล้ว ให้ 9/10 ครับ สวยงามน่าใช้ แถมใช้งานง่ายด้วย สามารถแปลแบบ กลุ่มคำ หรือแบบ คำเดี่ยวก็ได้ ใช้เป็น Dict ภายในเวบเลยก็ยังได้</p>
<p>ยังไงก็ลองไปเล่นกันดูนะครับ ผมคงไม่เขียนอธิบายวิธีใช้ เพราะเค้าเขียนไว้หมดแล้ว ไม่เข้าใจยังไง view source ดูกันเอาก็น่าจะพอเข้าใจอยู่ ตัวนี้ส่วนตัวผมถือว่าเป็น <strong>Plugin น้ำดี</strong> ตัวนึงเลยทีเดียว </p>
<p>อันนี้เป็นตัวอย่างที่ผมลองเอามาเขียนเล่นๆครับ</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">http://www.jQueryTips.com/example/GTranslate/</div>
</li>
</ol>
</div>
<p>เอ แต่ถ้าอ่าน เว็บเค้าแล้วไม่เข้าใจ ก็ลองอย่าลืมใช้ Google Translate มาเป็นภาษาแม่ เราดูนะครับ 555++ </p>
<p>วันนี้ลาไปก่อนแค่นี้ล่ะ จะไปแรดข้างนอกละ ^^</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2009/03/06/jquery-with-gogole-translate/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>โหลดเมื่อจำเป็นต้องโหลด</title>
		<link>http://www.jquerytips.com/2008/09/09/getscript-jquery/</link>
		<comments>http://www.jquerytips.com/2008/09/09/getscript-jquery/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 17:21:40 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=127</guid>
		<description><![CDATA[รู้มั้ยครับ คุณสมบัติเด่นอีกอย่างนึงของ JavaScript คืออะไร &#8220;แดกแรม client&#8221; ใช่แล้วครับ มันชอบดูดแรมผู้ใช้งานไปเรื่อย โดนไม่คืนเสียด้วย แถมการ include JavaScript ที่เขียนเยอะๆ ไฟล์ใหญ่ๆ เข้าไปยังทำให้ page load ช้าอีก นอกเหนือจาก เทคนิค การ บีบอัดไฟล์ js แล้ว วันนี้ผมจะมาแนะนำ อีกเทคนิคนึงกัน นั่นคือ&#8230;
การใช้คำสั่ง $.getScript ซึ่งคำสั่งนี้ ใช้ทำอะไรบ้างมาดูกัน
1. สามารถ ใช้เรียก javascript ให้ทำงาน หลังจากทำ Event ต่างๆ เป็นการแก้ปัญหา event listener ไปในตัว
2. สามารถ ลดโหลด ในหน้าเวบได้ โดยจะเรียกใช้เมื่อจำเป็นเท่านั้น
ในวันนี้ผมจะมาแนะนำ ประโยชน์ในข้อที่ 2 กัน เพราะข้อที่ 1 พูดมาหลายทีแล้ว เรื่องแก้ปัญหา event ไม่รับฟังหลังจากมีการ append [...]]]></description>
			<content:encoded><![CDATA[<p>รู้มั้ยครับ คุณสมบัติเด่นอีกอย่างนึงของ JavaScript คืออะไร &#8220;แดกแรม client&#8221; ใช่แล้วครับ มันชอบดูดแรมผู้ใช้งานไปเรื่อย โดนไม่คืนเสียด้วย แถมการ include JavaScript ที่เขียนเยอะๆ ไฟล์ใหญ่ๆ เข้าไปยังทำให้ page load ช้าอีก นอกเหนือจาก เทคนิค การ บีบอัดไฟล์ js แล้ว วันนี้ผมจะมาแนะนำ อีกเทคนิคนึงกัน นั่นคือ&#8230;<span id="more-127"></span></p>
<p>การใช้คำสั่ง $.getScript ซึ่งคำสั่งนี้ ใช้ทำอะไรบ้างมาดูกัน</p>
<p>1. สามารถ ใช้เรียก javascript ให้ทำงาน หลังจากทำ Event ต่างๆ เป็นการแก้ปัญหา event listener ไปในตัว<br />
2. สามารถ ลดโหลด ในหน้าเวบได้ โดยจะเรียกใช้เมื่อจำเป็นเท่านั้น</p>
<p>ในวันนี้ผมจะมาแนะนำ ประโยชน์ในข้อที่ 2 กัน เพราะข้อที่ 1 พูดมาหลายทีแล้ว เรื่องแก้ปัญหา event ไม่รับฟังหลังจากมีการ append DOM ขึ้นมาใหม่เนี่ย</p>
<p><strong>test.html</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;html&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;title&gt;jQueryTips.com&lt;/title&gt;
</div>
</li>
<li class="li2">
<div class="de2">&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.js&quot;&gt;&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;script language=&quot;JavaScript&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;!&#8211;
</div>
</li>
<li class="li1">
<div class="de1">$(function() {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; $(&#8216;.loadJs&#8217;).click(function() {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.getScript(&#8217;script.js&#8217; , function() {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // do something after script loaded
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; });
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">});
</div>
</li>
<li class="li1">
<div class="de1">//&#8211;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/script&gt;
</div>
</li>
<li class="li2">
<div class="de2">&lt;/head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;body&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;a href=&quot;http://www.google.com&quot; class=&quot;loadJs&quot;&gt;Click to load JS&lt;/a&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;div class=&quot;redit&quot;&gt;Some Text&lt;/div&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;/body&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/html&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p><strong>script.js</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;.redit&#8217;</span><span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&#8216;background&#8217;</span>, <span class="st0">&#8216;red&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>จากตัวอย่าง ไฟล์ script.js จะทำหน้าที่ เปลี่ยนสีของ bg โดยจะหา node ที่มี class = redit </p>
<p>ซึ่งการทำงานจะเริ่มตั้งแต่มีการกด .loadJs หลังจากที่ทำการกด จะไปเรียก script include ที่ชื่อว่า script.js โดยใช้คำสั่ง $.getScript</p>
<p>และ script.js จะทำงานต่อทันที เพื่อใช้งาน ณ ขณะนั้นเลย ไม่จำเป็นต้องโหลดมาไว้ทั้งหมดก่อน</p>
<p>เอาล่ะ วันนี้อัพเดท สั้นๆ พอหลังจากหายไปนาน ไว้จะเอา Tips เด็ดๆ มาฝาก jQueryTips Fans กันอีกนะครับ ^^</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2008/09/09/getscript-jquery/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>livequery ปลั๊กอินที่ ช่วยแก้ปัญหา JS ไม่ยอมเชื่อฟังหลังจาก DOM อัพเดท</title>
		<link>http://www.jquerytips.com/2008/08/15/jquery-livequery/</link>
		<comments>http://www.jquerytips.com/2008/08/15/jquery-livequery/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 17:52:36 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[listener]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=114</guid>
		<description><![CDATA[วันนี้มาแนะนำ plugin ดีๆ อีกตัว&#8230;
โปรแกรมเมอร์หลายคนที่เขียน ajax หรือ javascript บ่อยๆ คงเคยเจอปัญหา ว่า javascript ไม่ยอม ทำงานต่อหลังจากที่เรา append DOM ใหม่ๆ ที่มี event เข้ามาด้วย 
จริงๆ ผมก็เคยแนะนำวิธีไปคร่าวๆ แล้วเหมือนกัน ใน &#8220;วิธีแก้ไขปัญหา events ไม่ทำงานหลังจาก ajax requested&#8221;
แต่วันนี้จะมาทำเรื่องง่ายให้เป็นเรื่อง ง่ายเข้าไปอีด้วย plugin ดีๆ ตัวนี้ &#8220;livequery&#8221;
สมมุติว่าเราเขียน jquery แบบนี้



&#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Strict//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&#34;&#62;



&#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34; xml:lang=&#34;en&#34; lang=&#34;en&#34;&#62;



&#60;head&#62;



&#60;title&#62;jqueryTips.com&#60;/title&#62;



&#60;meta http-equiv=&#34;content-type&#34; content=&#34;text/html; charset=UTF-8&#34; /&#62;



&#60;script type=&#34;text/javascript&#34; src=&#34;jquery.js&#34;&#62;&#60;/script&#62;



&#60;script language=&#34;JavaScript&#34;&#62;



&#60;!&#8211;



$(document).ready(function() {



&#160;


&#160; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>วันนี้มาแนะนำ plugin ดีๆ อีกตัว&#8230;</p>
<p>โปรแกรมเมอร์หลายคนที่เขียน ajax หรือ javascript บ่อยๆ คงเคยเจอปัญหา ว่า javascript ไม่ยอม ทำงานต่อหลังจากที่เรา append DOM ใหม่ๆ ที่มี event เข้ามาด้วย </p>
<p>จริงๆ ผมก็เคยแนะนำวิธีไปคร่าวๆ แล้วเหมือนกัน<span id="more-114"></span> ใน &#8220;<a href="http://www.jquerytips.com/2008/04/21/events-after-ajax-requested-not-working/">วิธีแก้ไขปัญหา events ไม่ทำงานหลังจาก ajax requested</a>&#8221;</p>
<p>แต่วันนี้จะมาทำเรื่องง่ายให้เป็นเรื่อง ง่ายเข้าไปอีด้วย plugin ดีๆ ตัวนี้ &#8220;<a href="http://docs.jquery.com/Plugins/livequery">livequery</a>&#8221;</p>
<p>สมมุติว่าเราเขียน jquery แบบนี้</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;title&gt;jqueryTips.com&lt;/title&gt;
</div>
</li>
<li class="li2">
<div class="de2">&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.js&quot;&gt;&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;script language=&quot;JavaScript&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;!&#8211;
</div>
</li>
<li class="li1">
<div class="de1">$(document).ready(function() {
</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; $(&#8216;ul#container li&#8217;).click(function() {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(this).clone().appendTo(&#8216;ul#container&#8217;);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; });
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">});
</div>
</li>
<li class="li1">
<div class="de1">//&#8211;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;body&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;ul id=&quot;container&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Try me&lt;/a&gt;&lt;/li&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/ul&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&lt;/body&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/html&gt;</div>
</li>
</ol>
</div>
<p>ซึ่งการเขียนแบบนี้ แน่นอนว่า หลังจากที่ มีการ append DOM ขึ้นมาใหม่แล้ว ตัวที่ append ขึ้นมาจะไม่สามารถทำงานต่อไปได้ แต่ถ้าเราเปลี่ยนมาเป็นเขียนโดยใช้ livequery ช่วย แบบนี้</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;title&gt;jqueryTips.com&lt;/title&gt;
</div>
</li>
<li class="li2">
<div class="de2">&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.js&quot;&gt;&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.livequery.pack.js&quot;&gt;&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;script language=&quot;JavaScript&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;!&#8211;
</div>
</li>
<li class="li2">
<div class="de2">$(document).ready(function() {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; $(&#8216;ul#container li&#8217;).livequery(&#8216;click&#8217;, function() {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(this).clone().appendTo(&#8216;ul#container&#8217;);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; });
</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">});
</div>
</li>
<li class="li1">
<div class="de1">//&#8211;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/head&gt;
</div>
</li>
<li class="li2">
<div class="de2">&lt;body&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;ul id=&quot;container&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Try me&lt;/a&gt;&lt;/li&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/ul&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;/body&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/html&gt;</div>
</li>
</ol>
</div>
<p>ปัญหาทุกอย่างก็จะหมดไปทันที ทั้งยังสามารถเอาไปใช้กับ ajax ได้อย่างสบาย ลองดูละกัน ^^</p>
<p>Ps. ณ ปัจจุบัน jQuery 1.3x บรรจุ function live ไว้ใน core แล้ว ไม่ต้องทำงานผ่าน plugin livequery อีกต่อไป</p>
<p><a href="http://docs.jquery.com/Events/live#typefn">jQuery/events/live</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2008/08/15/jquery-livequery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://www.jquerytips.com/song/friday_night.mp3" length="2789715" type="audio/mpeg" />
		</item>
		<item>
		<title>Ajax with jQuery (Media version)</title>
		<link>http://www.jquerytips.com/2008/06/27/jquery-on-youtube/</link>
		<comments>http://www.jquerytips.com/2008/06/27/jquery-on-youtube/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 17:20:54 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/2008/06/27/xx/</guid>
		<description><![CDATA[คราวนี้ขอ อัพเดทแบบง่ายๆ ทีนึง พอดีไปแวะ Youtube มาเลยลอง หา jQuery Tutorial มาฝาก คราวนี้เป็น basic ajax ครับ แต่ ajax พื้นๆ ที่ไม่ต้องพึ่งพา ปลั๊กอินใดๆ แค่ jQuery ตัวเดียวก็เหลือแหล่
เนื้อหาก็เป็นการสอน เกี่ยวกับ ajax กับการรับ response ในรูปแบบต่างๆ เช่น html, xml เอาเป็นว่าไปดูกันเองเลยดีกว่า 
[wp_youtube]XdUFjAvOPU0[/wp_youtube]
]]></description>
			<content:encoded><![CDATA[<p>คราวนี้ขอ อัพเดทแบบง่ายๆ ทีนึง พอดีไปแวะ Youtube มาเลยลอง หา jQuery Tutorial มาฝาก คราวนี้เป็น basic ajax ครับ แต่ ajax พื้นๆ ที่ไม่ต้องพึ่งพา ปลั๊กอินใดๆ แค่ jQuery ตัวเดียวก็เหลือแหล่</p>
<p>เนื้อหาก็เป็นการสอน เกี่ยวกับ ajax กับการรับ response ในรูปแบบต่างๆ เช่น html, xml เอาเป็นว่าไปดูกันเองเลยดีกว่า <span id="more-37"></span></p>
<p>[wp_youtube]XdUFjAvOPU0[/wp_youtube]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2008/06/27/jquery-on-youtube/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax Cross Domain ใครว่าทำไม่ได้</title>
		<link>http://www.jquerytips.com/2008/04/26/ajax-cross-domain/</link>
		<comments>http://www.jquerytips.com/2008/04/26/ajax-cross-domain/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 18:56:32 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Jsonp]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/2008/04/26/ajax-cross-domain-%e0%b9%83%e0%b8%84%e0%b8%a3%e0%b8%a7%e0%b9%88%e0%b8%b2%e0%b8%97%e0%b8%b3%e0%b9%84%e0%b8%a1%e0%b9%88%e0%b9%84%e0%b8%94%e0%b9%89/</guid>
		<description><![CDATA[เรื่อง cross domain กับ ajax จริงๆแล้วในทางทฤษฎี มันควรจะทำได้ครับ แต่ทางปฎิบัติเราติดปัญหาเรื่อง Security  เลยไม่อนุญาติให้ทำกัน แต่ทีนี้ผมจะมาพูดถึง ajax cross domain อีกรูปแบบ ในกรณีที่อีก page ต่าง domain ยินยอมให้เข้าไป get ข้อมูล โดย register method ไว้ก่อน ซึ่งลักษณะนี้เรามักเรียกว่า Web Service หรือ API นั่นเอง 



var base_url = &#8216;http://www.jquerytips.com/debug/jsonp.php&#8217;;



&#160;



&#60;!&#8211; JavaScript &#8211;&#62;


$&#40;document&#41;.ready&#40;function&#40;&#41; &#123;


&#160; $&#40;&#8216;.doajax&#8217;&#41;.click&#40;function&#40;&#41; &#123;


&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; $.ajax&#40;&#123;


&#160; &#160; &#160; &#160; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>เรื่อง cross domain กับ ajax จริงๆแล้วในทางทฤษฎี มันควรจะทำได้ครับ แต่ทางปฎิบัติเราติดปัญหาเรื่อง Security  เลยไม่อนุญาติให้ทำกัน แต่ทีนี้ผมจะมาพูดถึง ajax cross domain อีกรูปแบบ ในกรณีที่อีก page ต่าง domain ยินยอมให้เข้าไป get ข้อมูล โดย register method ไว้ก่อน ซึ่งลักษณะนี้เรามักเรียกว่า <a href="http://en.wikipedia.org/wiki/Web_services" targe="_blank">Web Service</a> หรือ API นั่นเอง <span id="more-31"></span></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> base_url = <span class="st0">&#8216;http://www.jquerytips.com/debug/jsonp.php&#8217;</span>;</div>
</li>
</ol>
</div>
<p>&nbsp;</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;!&#8211; JavaScript &#8211;&gt;</div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;.doajax&#8217;</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.<span class="me1">ajax</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; url: base_url,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dataType: <span class="st0">&#8216;jsonp&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data: <span class="st0">&#8216;id=10&#8242;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jsonp: <span class="st0">&#8216;jsoncallback&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; success: <span class="kw2">function</span><span class="br0">&#40;</span>str<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.<span class="me1">each</span><span class="br0">&#40;</span>str, <span class="kw2">function</span><span class="br0">&#40;</span>i, <span class="kw1">item</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span> i + <span class="st0">&#8216;=&#8217;</span> + <span class="kw1">item</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&lt;!&#8211; JavaScript &#8211;&gt;</div>
</li>
</ol>
</div>
<p>&nbsp;</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;a href=&quot;javascript:void(0);&quot; class=&quot;doajax&quot;&gt;Ajax Call&lt;/a&gt;</div>
</li>
</ol>
</div>
<p>ตามตัวอย่างโคดด้านบนจะเห็นได้ว่า dataType เราเป็น <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/" target="_blank">jsonp</a> โดยที่เรามี callback ชื่อว่า jsoncallback ที่นี้เรามาดูโคดทางฝั่ง server ว่าจะคืนค่ามายังๆไง (ในที่นี้ผมใช้ php เป็น server side script)</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&#8216;JSON/JSON.php&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$json</span> = <span class="kw2">new</span> Services_JSON<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$arr</span><span class="br0">&#91;</span><span class="st0">&#8216;uri&#8217;</span><span class="br0">&#93;</span> = <span class="re0">$_SERVER</span><span class="br0">&#91;</span><span class="st0">&#8216;REQUEST_URI&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$arr</span><span class="br0">&#91;</span><span class="st0">&#8216;query&#8217;</span><span class="br0">&#93;</span> = <span class="re0">$_SERVER</span><span class="br0">&#91;</span><span class="st0">&#8216;QUERY_STRING&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;jsoncallback&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&#8216;(&#8216;</span>.<span class="re0">$json</span>-&gt;<span class="me1">encode</span><span class="br0">&#40;</span><span class="re0">$arr</span><span class="br0">&#41;</span>.<span class="st0">&#8216;)&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>สังเกตุว่าผมมีการ set ค่า $_GET['jsoncallback'] ก่อนที่จะ return data คืนให้นั่นคือตัวบอกครับ ว่าเราจะ allow callback ตัวนี้ เท่านี้เราก็จะได้ data ที่เป็น json กลับไปแล้วครับ ถึง 2 script นี้จะอยู่ต่าง domain กัน</p>
<p>จริงๆ แล้ว jQuery ในส่วนของ ajax request เรายังเขียนได้สั้นกว่านี้อีกนะครับ โดยเขียนแค่</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">$.<span class="me1">getJSON</span><span class="br0">&#40;</span>base_url + <span class="st0">&#8216;?jsoncallback=?&#8217;</span>, <span class="kw2">function</span><span class="br0">&#40;</span>obj<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.<span class="me1">each</span><span class="br0">&#40;</span>obj, <span class="kw2">function</span><span class="br0">&#40;</span>i, <span class="kw1">item</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span> i + <span class="st0">&#8216;=&#8217;</span> + <span class="kw1">item</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>ก็ยังทำงานได้เหมือนกันตามปกติ</p>
<p>ทีนี้เราลองมาคิดดูว่าการทำแบบนี้จะมีประโยชน์ยังไงบ้าง</p>
<p>1. ลด resource ของการทำงาน โดยเราไม่จำเป็นต้องใช้ server เดียวในการ return data<br />
2. สามารถทำ Web Service เพื่อให้ชาวบ้านมาใช้ได้ง่ายๆ</p>
<p>ตอนนี้คิดประโยชน์ได้แค่นี่ แหะๆ ^^</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2008/04/26/ajax-cross-domain/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>วิธีแก้ไขปัญหา events ไม่ทำงานหลังจาก ajax requested</title>
		<link>http://www.jquerytips.com/2008/04/21/events-after-ajax-requested-not-working/</link>
		<comments>http://www.jquerytips.com/2008/04/21/events-after-ajax-requested-not-working/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 16:44:33 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[event]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/2008/04/21/events-after-ajax-request-not-working/</guid>
		<description><![CDATA[ผ่านพ้นสงกรานต์ไปแล้วก็หวังว่าทุกคนคงยังสบายดีกันอยู่นะครับ ไม่ใช่ไปเมาตกน้ำแถวไหน อิอิ (ล้อเล่นนะครับ) ตัวผมเองก็ห่างหายจากการอัพเดทบล๊อกไปนานทีเดียว วันนี้ก็เลยจะมาพูดถึงปัญหาสำคัญที่หลายๆ คนมักตั้งข้อสงสัยกันว่า 
&#8220;ทำไม event ต่างๆที่เขียนในรูปแบบของ jQuery จึงไม่ทำงานหลังจาก ajax call ?&#8221;
เช่นสมมุติเราเขียน function ให้ทำงานตามนี้



$&#40;&#8216;a.doajax&#8217;&#41;.click&#40;function&#40;&#41; &#123; alert&#40;&#8216;I am a link&#8217;&#41;; &#125;&#41;;



จากนั้นเีรามี ajax request ไปที่ไฟล์ more.html ซึ่งหลังจากเรารับค่ามาแล้ว พอดีในไฟล์นี้มี tag a.doajax อยู่ด้วย แต่มันจะไม่สามารถทำงานได้ เพราะว่าคำสั่งที่เราเขียนว่าจะทำงาน at time ที่มันโหลดเท่านั้น ไม่ทำงานต่อในกรณีเราใช้งาน ajax call ซึ่งเราสามารถแก้ไขปัญหาได้แบบนี้



&#60;script language=&#34;javascript&#34;&#62;


$&#40;document&#41;.ready&#40;function&#40;&#41; &#123;


&#160; var bindBehaviors = function&#40;&#41; &#123;


&#160; &#160; $&#40;&#8216;a.doajax&#8217;&#41;.click&#40;function&#40;&#41; &#123;


&#160; &#160; &#160; alert&#40;&#8216;I am [...]]]></description>
			<content:encoded><![CDATA[<p>ผ่านพ้นสงกรานต์ไปแล้วก็หวังว่าทุกคนคงยังสบายดีกันอยู่นะครับ ไม่ใช่ไปเมาตกน้ำแถวไหน อิอิ (ล้อเล่นนะครับ) ตัวผมเองก็ห่างหายจากการอัพเดทบล๊อกไปนานทีเดียว วันนี้ก็เลยจะมาพูดถึงปัญหาสำคัญที่หลายๆ คนมักตั้งข้อสงสัยกันว่า </p>
<p>&#8220;ทำไม event ต่างๆที่เขียนในรูปแบบของ jQuery จึงไม่ทำงานหลังจาก ajax call ?&#8221;<span id="more-29"></span></p>
<p>เช่นสมมุติเราเขียน function ให้ทำงานตามนี้</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&#8216;a.doajax&#8217;</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&#8216;I am a link&#8217;</span><span class="br0">&#41;</span>; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>จากนั้นเีรามี ajax request ไปที่ไฟล์ more.html ซึ่งหลังจากเรารับค่ามาแล้ว พอดีในไฟล์นี้มี tag a.doajax อยู่ด้วย แต่มันจะไม่สามารถทำงานได้ เพราะว่าคำสั่งที่เราเขียนว่าจะทำงาน <strong>at time</strong> ที่มันโหลดเท่านั้น ไม่ทำงานต่อในกรณีเราใช้งาน ajax call ซึ่งเราสามารถแก้ไขปัญหาได้แบบนี้</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;script language=<span class="st0">&quot;javascript&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> bindBehaviors = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;a.doajax&#8217;</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&#8216;I am a link&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; bindBehaviors</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;a.ajaxRequest&#8217;</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;#somediv&#8217;</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">load</span><span class="br0">&#40;</span><span class="st0">&#8216;more.html&#8217;</span>, <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; bindBehaviors</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">fadeIn</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&lt;/script&gt;</div>
</li>
</ol>
</div>
<p>วิธีการนี้เป็นการเตรียม function ไว้ก่อน ซึ่งตอน load เราก็เรียกมา 1 ที หลังจาก ajax call เราก็เรียกมาอีก 1 ทีเพื่อให้ tag a.doajax ที่อาจจะมีใน more.html รับฟังมันไปอีกที ไม่ยากใช่มั้ยครับ</p>
<p>ซึ่งนอกจากวิธีนี้ ก็ยังมี นักพัฒนาหลายคนที่เขียน plugin ไว้แก้ปัญหานี้ด้วยเช่น </p>
<p><a href="http://jquery.com/plugins/project/livequery/">Live Query</a><br />
<a href="http://plugins.jquery.com/project/Intercept">Intercept</a></p>
<p>สำหรับวันนี้พอแค่นี้ละครับ หอมปากหอมคอ เดี๋ยวเร็วๆนี้จะนำเรื่องที่น่าสนใจกว่านี้มาอัพให้ครับ </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2008/04/21/events-after-ajax-requested-not-working/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ajax SEO และ jQuery</title>
		<link>http://www.jquerytips.com/2008/01/15/ajax-seo-jquery/</link>
		<comments>http://www.jquerytips.com/2008/01/15/ajax-seo-jquery/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 04:33:05 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/2008/01/15/ajax-seo-%e0%b9%81%e0%b8%a5%e0%b8%b0-jquery/</guid>
		<description><![CDATA[ช่วงนี้กระแส SEO กำลังแรง เลยขอมาพูดซะหน่อย ^^
ตอนนี้เทรนด์ที่มาแรงในการพัฒนาเวบไซด์คงหนีไม่พ้น Ajax ซึ่งหลายๆคนคงทราบอยู่แล้วว่ามันมีการทำงานยังไง ถ้ายังไม่รู้ก็ลองไปอ่านได้ที่ Blog เพื่อนผมเอง What&#8217;s ajax แต่ปัญหาที่สำคัญของ Ajax ก็คือเรื่อง SEO นี่แหละ เพราะจากที่ผมทราบ Googlebot ไม่สามารถที่จะอ่าน Javascript หรือ Events ต่างๆ เช่น onclick, onkeypress, on&#8230; ต่างๆ ได้ ทำให้เป็นผลเสียกับ SEO เป็นอยากมาก เพราะ Botengine ไม่สามารถที่จะ เก็บข้อมูลเพื่อไปสร้าง Index ให้ได้ 
ลองดูข้อมูลที่ Bot เห็นได้ที่นี่ คลิก
แต่ปัญหานี้เราสามารถแก้ไขได้ครับ โดยการไม่ใช้ Events ตรงๆ เช่น onclick=&#8221;ajaxsomething();&#8221; แต่เปลี่ยนมาเป็นการไต่เอกสารในรูปแบบ DOM แทน ซึ่งลองดูตัวอย่างได้ ที่เวบเพื่อนผมอีกคน Bot vs [...]]]></description>
			<content:encoded><![CDATA[<p>ช่วงนี้กระแส SEO กำลังแรง เลยขอมาพูดซะหน่อย ^^</p>
<p>ตอนนี้เทรนด์ที่มาแรงในการพัฒนาเวบไซด์คงหนีไม่พ้น Ajax ซึ่งหลายๆคนคงทราบอยู่แล้วว่ามันมีการทำงานยังไง ถ้ายังไม่รู้ก็ลองไปอ่านได้ที่ Blog เพื่อนผมเอง <a href="http://blog.gootum.com/ajax-blog/gootum-ajax-blog">What&#8217;s ajax</a> แต่ปัญหาที่สำคัญของ Ajax ก็คือเรื่อง SEO นี่แหละ เพราะจากที่ผมทราบ Googlebot ไม่สามารถที่จะอ่าน Javascript หรือ Events ต่างๆ เช่น onclick, onkeypress, on&#8230; ต่างๆ ได้ ทำให้เป็นผลเสียกับ SEO เป็นอยากมาก เพราะ Botengine ไม่สามารถที่จะ เก็บข้อมูลเพื่อไปสร้าง Index ให้ได้ <span id="more-18"></span></p>
<p>ลองดูข้อมูลที่ Bot เห็นได้ที่นี่ <a href="http://blog-well.com/2007/03/20/what-does-the-googlebot-see-when-it-visits-your-site/">คลิก</a></p>
<p>แต่ปัญหานี้เราสามารถแก้ไขได้ครับ โดยการไม่ใช้ Events ตรงๆ เช่น onclick=&#8221;ajaxsomething();&#8221; แต่เปลี่ยนมาเป็นการไต่เอกสารในรูปแบบ DOM แทน ซึ่งลองดูตัวอย่างได้ ที่เวบเพื่อนผมอีกคน <a href="http://www.thaiajax.com/blog/node/34">Bot vs SEO</a></p>
<p>ซึ่งตจรงนี้เราสามารถใช้ jQuery ได้ง่ายๆเช่น เราจะเรียก content เพื่อมาวางใน div ชุดนึง</p>
<p><code lang="html">
<div id="fadeContent"></div>
<p><a href="/somecontent.html" rel="aj"></a></code></p>
<p>ซึ่งจากโคดด้านบนผมต้องการที่จะให้เรียก url ที่อยู่ตาม link เพื่อมาแสดงใน div ผมก็จะเขียนแค่</p>
<p><code>$(document).ready(function() {<br />
  $("[@rel='aj']").click(function() {<br />
    var URL = $(this).attr('href');<br />
    $.get(URL, function(data) {<br />
      $("#fadeContent").html(data);<br />
    });<br />
    return false;<br />
  });<br />
});</code></p>
<p>เท่านี้ผมก็สามารถให้ Ajax ทำงานเหมือนเดิมโดยที่ Bot ก็ยังวิ่งไปที่ Anchor ได้เหมือนเดิม และยัง เก็บ index ได้ตามปกติ แต่ว่า&#8230;</p>
<p>วิธีนี้ก็ยังมีผลเสียอีกนิดนึงที่เราอาจจะมองข้ามไป นั่นคือสิ่งที่ Google จะเก็บ ตามตัวอย่างนี้คือ somecontent.html ซึ่งแน่นอนมันจะมีแค่ content ซึ่งเราจะดึงมาโชว์ในหน้าที่จัด layout แล้ว ดังนั้นเวลา Google index ไปแล้ว user คลิกเข้ามาจาก search จะเจอแต่ตัว content ที่ไม่มี layout แน่นอนว่ามันไม่ใช่ผลดีเลย -*-</p>
<p>ดังนั้นเราอาจจะแก้ไขได้โดย เติม parameter 1 ตัวส่งไปเช่น</p>
<p><code>var URL = $(this).attr('href') + '?type=ajax';</code></p>
<p>แล้วในหน้า somecontent.html ก็เปลี่ยนมาเป็น server side script เช่น php asp jsp แล้วไปดักข้อมูลคือ </p>
<p>(ในที่นี่ผมจะลองโดยใช้ php)</p>
<p><code>if ($_GET['type'] == 'ajax')<br />
{<br />
  //ค่าที่จะส่งให้ javascript นำไปประมวลผลต่อ อาจจะออกมาในรูปแบบ html, text, json, xml อะไรก็ตามแต่สะดวก<br />
  echo "content";<br />
}<br />
else<br />
{<br />
  //render ตามปกติ เป็นเวบไซด์ซึ่งมี content กับ layout<br />
  echo "header";<br />
  echo "content";<br />
  echo "footer";<br />
}</code></p>
<p>เท่านี้ปัญหาก็จะหมดไป รวมถึงไม่ต้องกังวลว่า web เราจะไม่สามารถใช้ได้ถ้า user ไม่มี javascript อีกดวย ^^</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2008/01/15/ajax-seo-jquery/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
