
ช่วงนี้ กระแส AJAX มาแรงมากครับ เข้าไปท่องเว็บบอร์ดที่ไหน ก็ต้องเจอ AJAX กันทุกเว็บบอร์ด แม้กระทั่งในนี้ก็ยังมี เหอๆ สำหรับท่านที่เพิ่งมาอ่านใหม่ ถ้ายังไม่เข้าใจว่า AJAX คืออะไร search เอานะครับ
อย่างที่บอกไปแล้ว ช่วงนี้ผมทำ Ruby on Rails อยู่ รู้สึกทึ่งกับความสามารถของ Rails มากมาย มันเป็น magic บนเว็บเลยนะ อะไรมันจะง่ายขนาดนี้
1 feature ที่ผมพบคือ AJAX on Rails นี่แหละ มันสร้างความมหัศจรรย์ ให้กับผมมาก จากตอนแรกที่เราต้องส่ง XML โยนกันไปโยนกันมาระหว่าง backend ไปยัง frontend แล้วพอรับ XML ชุดนั้นมาแล้ว เราจะต้องไปเขียนสั่ง html dom ให้ทำนั่น วาดนี่ ลบอันนั้น โอ้ย สาระพัด เปลืองพลังงานมากมายเลยครับ แต่ AJAX on Rails ช่วยให้พลังถดถอยน้อยมากมายยยย เราไม่ต้องไปสนใจ XML อะไรนั่นแล้ว หรือต้องมานั่งสั่ง html dom ให้ทำงานตามความต้องการ มันจะมี API สำหรับจัดการ html dom ทั้งหมด
มาดูหลักการคร่าวๆ ของ Rails ที่ไปจัดการกับ AJAX ดีก่า
Rails มันมี library ต่างๆ นานา ไว้จัดการกับ AJAX อยุ่แล้ว สบายมากๆ เพียงแค่เรียกใช้ method ที่จัดไว้ให้ ก็เรียบร้อยแล้ว มาดู process รวมๆ ก่อน เหมือนๆ กันทุกเว็บ
- user ทำอะไรบางอย่างบนหน้าเว็บ ก็คือ event ต่างๆ นั่นเอง เช่น กดปุ่ม กด link หรือเปลี่ยนแปลง data ใน textfield
- แล้วมันก็จะทำการส่งแบบ asynchronously ไปยัง server โดยผ่าน XMLHttpRequest
- แล้ว serverside ก็จะทำการอะไรสักอย่าง ที่เรากำหนดไว้ แล้วส่งกลับมายังหน้าเว็บของเราโดย XML
- แล้วตัว JavaScript (จะถูกสร้างโดย Rails อย่างอัติโนมัติ) ก็จะทำการ update หน้าเว็บโดยใช้ข้อมูลจาก XML ที่รับมานี่แหละ
แต่ที่เราจะมาดูคือ มาดูว่า Rails มันมีการจัดการหน้าเว็บของเราที่มันแสนง่าย ยังไง
link_to_remote
อย่างที่บอกไป Rails มันจะมีพวก library ที่บรรจุ method ต่างๆ ที่ไว้จัดการกับหน้าเว็บ ซึ่งหนึ่งในนั้นก็คือ link_to_remote
มาค่อยๆ พิจารณาหน้า page ง่ายๆ ก่อนดีกว่า คือหน้านี้จะมี link สำหรับแสดงเวลา ใน app ก็จะทำการใช้ AJAX ทาง link_to_remote นี่แหละ ในการที่จะรับค่าเวลากลับมา
index.rhtml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <html>
<head>
<title>Ajax Demo</title>
<strong><%= javascript_include_tag "prototype" %></strong>
</head>
<body>
<h1>What time is it?</h1>
<div id="time_div">
I don't have the time, but
<strong><%= link_to_remote( "click here",
:update => "time_div",
:url =>{ :action => :say_when }) %></strong>
and I will look it up.
</div>
</body>
</html>
|
อันนี้จะมีสอง method ก็คือ javascriptincludetag() มันจะนำ Prototype ซึ่งเป็น framework อีกตัวหนึ่งของ JavaScript เข้ามาให้ Rails ทำการเรียกใช้
ตัวถัดมาก็คือ link_to_remote() ในการเรียกใช้ form ก็จะมี 3 parameter คือ
- text ที่จะแสดงบนปุ่ม
- id ของ html dom ที่จะทำการ update
- ตัว action ซึ่งมันจะไปเรียก method ที่เราเขียนไว้ใน Controller
ก่อนคลิก
แล้วมาดูที่ตัว Controller กันต่อ (หลายๆ คนอาจจะงง แต่ไม่นานหรอกคับ เดี๋ยวจะว่าเกี่ยวกับ Ruby on Rails ต่ออีก)
1
2
3
4
5
6
7
8
| class DemoController < ApplicationController
def index
end
def say_when
render_text "<p>The time is <b>" + DateTime.now.to_s + "</b></p>"
end
end
|
ผลที่ได้หลังจากคลิก
หน้า index นี้ ก็ไม่มีอะไรมาก ก็จะมี link ให้คลิกเพื่อแสดงเวลา ตัว say_when method ก็จะทำการ render ให้ใหม่ จริงๆแล้ว process เดิมๆ ของ AJAX ก็ยังคงอยู่ ไม่ว่าจะเป็น XMLHttpRequest หรือตอนส่งค่ากลับมาเป็น XML แต่ตัว Rails นี่แหละ ทำให้เราไม่ต้องไปเสียเวลาจัดการกับส่วนนี้ สบายที่สุด
ยังมี optional parameter อยู่อีกตัวนึง
1
2
3
4
| <%= link_to_remote( "click here",
:update => "time_div",
:url => { :action => :say_when },
:position => "after" ) %>
|
ตัวที่เพิ่มเข้ามาคือ position ก็จะมีค่าที่เป็นไปได้คือ before, after, top, และ bottom
before กะ after จะทำนอก tag ที่เราระบุ id
แต่ top กะ buttom จะทำใน tag ที่เราระบุ id เช่นกัน
ผลลัพธ์

ยาวจัง
ยังไม่จบครับ
คราวหน้ามีต่อ
ข้อมูลจาก
http://www.onlamp.com
แก้ไขล่าสุด วันที่ 3 กรกฏาคม 2550 เวลา 21.58 น.