jQueryTips by Tee++;

  • Home
  • Videos
  • jQueryTips's Fans

Coding like playing a piano.

Subscribe RSS

Search

Search

Sponsored

jQueryTips on Social

Followers

hide
Chainnnn Pang25441 Dexteri@n Ton KanexKane Supachai JustDoIt Rut petchy Tophit anndrew Webmaster

Categories

hide
  • Programing
  • Database
  • Framework
  • Mobile Development
    • Titanium Mobile
    • PhoneGap
  • Life

Tag Cloud

hide
PHP JavaScript MySQL XML Mobile jQuery CodeIgniter Hash php xml Debug Library Zend API Events Plugins Facebook Basic Registration Tool Twitter Search Swath Performance ffmpeg YouTube Web Service Yahoo! NoSQL MongoDB PhoneGap

Recent Posts

hide
  • ใครๆ ก็มี Utils เอางี้เราเพิ่ม Utils ให้กับ CodeIgniter กันบ้าง
  • แนะนำ JS.Class (A JavaScript class library)
  • PHP กับ OOP มาปูพื้นฐานกันเสียใหม่ก่อน
  • ประกาศข่าวสารจาก Admin
  • JSFIDDLE สุดยอด Tools สำหรับการ Debug การเขียนตัวอย่างโคด
  • Titanium Mobile + HTML + Native Scrolling
  • HTML to PDF ตัวไหนดี วันนี้ผมมีคำตอบ ...
  • ทำความรู้จักกับ JavaScript Pattern ในเชิงลึก
  • ผมบอกคุณแล้ว .... คนโง่ก็ Code ได้
  • วันนี้ มาออกแบบ Web Service ด้วย PHP กันเถอะ (CodeIgniter Version)

Recent Comments

hide
  • เยดดดด
  • มีตัวอย่าง CI แบบ เพียว ๆ ไหมครับ
  • ขอบคุณมากครับ เห็นแนวทางได้ชัดขึ้นจากตอนแรก ที่งงไปหมด ไม่รู้อะไรเป็นอะไร
  • ขอบคุณมากเลยครับท่าน....แหม่เพิ่มกำลังใจให้ผมได้เยอะเลย ตอนนี้กำลังฝึกงานอยู่ที่แห่งนึงในหาดใหญ่ พร้อมเด็กจากอีกสถาบันนึง 3 คน เราคิดว่าเรา…
  • Very good blog, I really like ~

Links

hide
  • OSCOOL
  • Architeture & Performance
  • Video and TV
  • Appcelerator
  • PhoneGap
  • Home
  •  » Blogs

มาทำ Autosave กันเถอะ jQuery Ajax ช่วยได้

Mar 27, 2009 12:43:17 AM | 0 Comments | in Programing | jQuery
มาอัพเดทต่อๆ วันนี้จริงๆว่าจะนอนแล้วล่ะ เหนื่อยๆ ง่วงๆ เพลียๆ มึนๆ ยังไงชอบกล แต่เอาว่า อยากได้ keyword "AJAX" ก็ต้องขยันอัพกันนิดนึง เพราะผมเชื่อในเรื่อง Content is the King เลย พยายมๆ สร้าง Unique Content ที่มีคุณภาพขึ้นมา ^^

วันนี้เราลองมาประยุกต์ใช้ ajax ในการทำ auto save ดีกว่า จริงๆ plugin แบบนี้ ถ้าหาดูจาก Google ก็จะเห็นอยู่ 2-3 ตัว มีทั้งแบบ save ลง Cookie หรือ ส่งไปทำงานตาม url ที่เรากำหนด พร้อม function restore มาเสร็จสรรพ

แต่เนื่องจากวันนี้ผมไม่ได้มา review แต่จะมาอธิบายถึง การประยุกต์ใช้งาน ajax ใน jQuery กัน เลยจะขอลองเขียน plugin แบบ simple ขึ้นมาใช้งานเองกัน เอาแบบง่ายๆ พอเป็นพิธีก็พอ

การทำ Autosave นั้น ก็คือการส่งข้อมูลไป save เป็นระยะๆ ทั้งๆ ที่เรายังไม่ได้กด save เลย โดยการทำแบบนี้ ก็มีข้อดีของมันดังนี้ครับ

1. ช่วยให้ข้อมูล ไม่หายในกรณี ไฟดับ คอมแฮงค์ หรือปัญหาที่ เรียกได้ว่าเป็น อุบัติเหตุ ทางเทคนิค

2. ช่วยเรื่อง session timeout ในกรณีที่ set timeout ของช่วงเวลา login

3. เท่ห์ ....

เอาล่ะ ทีนี้เรามาลองเขียน plugin ง่ายๆกัน สักตัวนึง

File: autosave.jquerytips.js

jQuery.extend({



	autosave: function(s) {

		var defaults = {

			form: '#myform',

			delay: 10000,

			calback: ''

		}

		var options = jQuery.extend(defaults, s);

		this.save(options);

	},

	save: function(i) {

		setInterval(function() {



			var eml = document.createElement('div');

			jQuery(eml).attr('id', 'status').css({

				position: 'absolute',

				background: 'red',

				color: 'white',

				padding: '3px 10px',

				font: '12px verdana',

				top: jQuery(document).scrollTop(),

				right: 0

			}).html('saved');



			jQuery('body').prepend(eml);



			var urlPost = jQuery(i.form).attr('action');

			var params = jQuery(i.form).find('input, textarea, select').serialize();

			jQuery.ajax({

				url: urlPost,

				type: 'POST',

				data: params,

				success: function(rs) {

					setTimeout(function() { jQuery('#status').remove() }, 2000);

					i.callback(rs);

				}

			});

		}, i.delay);

	}



});





จากที่เห็น plugin จะทำงานแบบนี้ครับ คือรับ parameter เข้ามากำหนดค่า ดังนี้
form = id ของ Form ที่เราต้องการทำงานด้วย
delay = ช่วงหน่วงเวลาของการ save แต่ระครั้ง (inteval)
callback = ค่าที่จะ return กลับไปจากไฟล์ปลายทาง

คำสั่งหลักๆ จะอยู่ที่ method save ครับ โดยเริ่มต้นจาก การ set inteval ตามช่วงเวลาหน่วง และ ตกแต่งให้สวยงาม โดยการทำ label save ให้แสดงผล ที่บนขวา ของหน้าจอ

จากนั้นก็จะหา action ของ form มาด้วย
var urlPost = jQuery(i.form).attr('action');

หาค่าทั้งหมดของ input มา serialize ด้วยคำสั่ง
var params = jQuery(i.form).find('input, textarea, select').serialize();

แล้วก็ส่งให้ ajax ทำงาน สุดท้ายส่งค่าอะไรก็ตามที่ ไฟล์ save ส่งมาคืนให้กับ callback

File: sample.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>jQueryTips.com</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
<script src="autosave.jquerytips.js" type="text/javascript"></script>
<script type="text/javascript">
<!–
        $(function() {
 
                $.autosave({
                        form: ‘#autosave’,
                        delay: 10000,
                        callback: function(data) {
                                alert( data );
                        }
                });
 
        });
//–>
</script>
</head>
<body>
<p style="height:500px;"></p>
 
<form method="post" action="save.php" id="autosave">
<fieldset>
        <legend>Auto Save Plugin by jQueryTips.com</legend>
        <p>
                <label>Field 1</label>
                <input type="text" name="field_1" value="" />
        </p>
        <p>
                <label>Field 2</label>
                <textarea name="field_2"></textarea>
        </p>
        <p>
                <label>Field 3</label>
                <select name="field_3">
                        <option value="a">A</option>
                        <option value="b">B</option>
                        <option value="c">C</option>
                </select>
        </p>
        <p>
                <label>Field 4</label>
                <input type="radio" name="field_4" value="yes" /> Yes
                <input type="radio" name="field_4" value="no" /> No
        </p>
                <label>Field 5</label>
                <input type="checkbox" name="field_5" value="agree" /> Agree
        </p>
        <p>
                <input type="submit" value="Save" />
        </p>
</fieldset>
</form>
 
</body>
</html>


ส่วนนี้คือวิธีเรียกใช้งานครับ โดยระบุ parameters ไป คือ form, delay, callback (data ที่ return กลับมา จะเอามาทำอะไรต่อก็ตามแต่)

เท่านี้ก็เป็นอันเสร็จ

ส่วนการใช้งานในเรื่องของ save นั้นเราอาจจะทำได้แบบนี้ครับ
ส่งค่าเป็นเก็บลง DB จริงๆ เลย แต่ว่าทำ status เท่ากับ draft ไว้จากนั้นส่ง lnsert id กลับมา แล้วให้ callback append input hidden ของ id ลงไปใน เอกสาร HTML

หรือใครอาจจะเอาไปใช้แบบอื่นก็ได้นะครับ เช่นลองเก็บแบบ temporary เช่น memcached, apc, session, cookie, file อะไรก็ตามแต่จะไปคิดกัน

วันนี้พอแค่นี้ล่ะ บายๆ

twitter stumbleupon delicious digg facebook

0 comments

Add comment Load previous All comments

Leave a comment

Post Comment

Powered by OSCOOL. You may view this on RSS or ATOM.

OSCOOL

  • Twitter
  • Facebook
  • Next