วิธีการส่งข้อมูลระหว่าง PHP และ Flex by Ziah
Jan1
ในการส่งข้อมูลระหว่าง PHP และ Flex จะแบ่งได้เป็น 2 วิธีใหญ่ๆนะครับ คือ การใช้ Flashvars และ ใช้คอมโพเนนท์ RequestHelper
ข้อแตกต่างระหว่างการใช้ Flashvars และ คอมโพเนนท์ RequestHelper
1. Flashvars จะสามารถส่งค่าจาก PHP ไปยัง Flex ได้แต่ไม่สามารถส่งจาก Flex ไปยัง PHP ได้ ซึ่งถ้าเป็น RequestHelper จะสามารถส่งได้ทั้งสองทาง
2. Flashvars โดยหลักแล้วจะเป็นการกำหนดค่าเริ่มต้น เพราะจะทำงานที่หน้าแรกของ PHP ที่เราเรียกซึ่งจะทำการส่งค่าไปยัง Flex แต่ RequestHelper สามารถเรียกใช้ฟังก์ชั่นเมื่อแอปพลิเคชั่นกำลังทำงานอยู่
การส่งข้อมูลโดยใช้ Flashvars
เราจะทำการกำหนดค่าต่างๆที่ต้องการส่งเข้าไปใน Flex เมื่อทำการเริ่มรันแอปพลิเคชั่น โดยกำหนดไว้ในหน้าแรกที่มีการเรียกใช้ Flash เช่น
<?php
$swf_name = “TestFlashvars.swf”;
$title_str = ‘Test Flashvars’;
$detail_str = ‘This is a flashvars test.’;
$flash_vars = ‘title=’.$title_str.’&detail=’.$detail_str; //กำหนดค่าของ Flashvars
?>
<div class=”flash”>
<object classid=”clsid:xxxxxxxxxxxxxxxxxxxxxx”
id=”TestFlashvars” codebase=”http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab”>
<param name=”FlashVars” value=”<?=$flash_vars?>”>
<embed src=”<?=$src?>?a=<?=rand(0, 100000)?>” Flashvars=”<?=$flash_vars?>”
type=”application/x-shockwave-flash”
name=”flash”
id=”flash”
pluginspage=”http://www.adobe.com/go/getflashplayer”>
</embed>
</object>
</div>
จากนั้นเราจะทำการรับค่าใน Flex โดยมีการเรียกผ่าน Application.application.parameters.[ชื่อตัวแปร] ซึ่งจะทำให้ได้ค่าที่ส่งมา เช่น
public var mainTitle:String = Application.application.parameters.title;
public var mainDetail:String = Application.application.parameters.detail;
trace (mainTitle+”\n”+mainDetail)
ซึ่งเมื่อรันแล้วก็จะได้ค่าในคอนโซลดังนี้
Test Flashvars
This is a flashvars test.
จากตัวอย่างจะเห็นว่าประโยชน์ของ Flashvars คือการกำหนดค่าต่างๆที่ได้มาจาก PHP ก่อนจากนั้นค่อยนำไปใช้ใน Flex เมื่อเริ่มแอปพลิเคชั่น ซึ่งข้อดีคึอเมื่อแอปพลิเคชั่นต้องการค่าต่างๆจากตัวเว็ปหรือดาต้าเบสในทันทีที่เริ่มโปรแกรมก็สามารถนำมาจาก Flashvars
การส่งข้อมูลโดยใช้คอมโพเนนท์ RequestHelper
ในขั้นแรกเราต้องทำการลงคอมโพเนนท์ RequestHelper ก่อน
รายละเอียดโค๊ดภายในคอมโพเนนท์ ดังนี้
package com.lvup
{
import mx.rpc.http.HTTPService;
import mx.rpc.events.ResultEvent;public class RequestHelper
{
public static function sendRequest(url:String, func:Function = null, paramPost:Object = null, useCache:Boolean = false):void {
var HReq:HTTPService = new HTTPService();
if (paramPost == null) {
paramPost = {};
HReq.method=”GET”;
} else {
HReq.method=”POST”;
}
HReq.url = url;
if (!useCache)
HReq.url += “/?rand=” + Math.random()%100000;HReq.resultFormat=”text”;
HReq.addEventListener(ResultEvent.RESULT,func);
HReq.send(paramPost);
}
}
}
ภายในโค้ด Flex หรือ ActionScript ของเราที่จะทำการรับส่งค่าต้องมีการอิมพอร์ตดังนี้
import com.lvup.RequestHelper;
ต่อไปเป็นการส่งค่าแบบง่ายๆ ทั้งสองทาง
1. การใช้ฟังก์ชั่นเพื่อส่งค่าจาก Flex ออกไปยัง PHP
จะทำการส่งค่าออกจาก Flex โดยการใส่ฟังก์ชั่นดังนี้ใน Flex
public function save_flex():void {
var obj:Object = { //ทำการกำหนดค่าตัวแปรที่จะส่งไปยัง PHP
‘title’ : ‘Flex to PHP test’,
‘detail’ : ‘parsing value from Flex to PHP’
}
RequestHelper.sendRequest(site_url+’main/save_php’,saveCompleted,obj); //ใช้คอมโพเนนท์ RequestHelper ส่งค่าออกไปยัง PHP โดยมีพารามิเตอร์สามตัวคือ PHP ที่จะรับค่า, อีเวนท์ที่จะทำเมื่อทำการส่งค่าเสร็จแล้ว, ออพเจ็คของค่าที่จะทำการส่งไปยัง PHP
}
public function saveCompleted(e:ResultEvent):void{ //เมื่อค่าทำการส่งไปถึง PHP แล้ว
trace (“done.”);
}
ทำการรับค่าจาก Flex โดยมีฟังก์ชั่นใน PHP ดังนี้
function save_php(){
echo $_POST['title']; //ค่าที่มาจาก Flex จะได้ค่ามาเหมือนกับการใช้ Form Post ใน html
echo $_POST['detail'];
}
จะทำให้หน้า PHP แสดงผลลัพธ์ดังนี้
Flex to PHP test
parsing value from Flex to PHP
และเมื่อทำการส่งค่าเสร็จในคอนโซลของ Flex ก็จะขึ้น
done.
2. การใช้ฟังก์ชั่นเพื่อส่งค่าจาก PHP เข้าไปยัง Flex
จะทำการส่งค่าออกจาก PHP โดยการใส่ฟังก์ชั่นดังนี้ใน PHP
function load_php(){
$a_data = array( //ทำการกำหนดค่าตัวแปรที่จะส่งไปยัง Flex
‘title’ => ‘PHP to Flex test’,
‘detail’ => ‘parsing value from PHP to Flex’
);
echo json_encode($a_data); //ทำการเอ็นโค้ดค่าเพื่อส่งผ่าน JavaScript เข้าไปใน Flex
}
ทำการรับค่าจาก Flex โดยมีฟังก์ชั่นใน PHP ดังนี้
public function load_flex():void {
RequestHelper.sendRequest(site_url+’main/load_php’,loadResultCompleted); //ใช้คอมโพเนนท์ RequestHelper ส่งการเรียกค่าจาก PHP โดยมีพารามิเตอร์สามตัวคือ PHP ที่จะส่งการเรียกค่า, อีเวนท์ที่จะทำเมื่อทำการส่งการเรียกค่าเสร็จ
}
public function loadResultCompleted(e:ResultEvent):void { //เมื่อค่าเข้ามาถึงแอปพลิเคชั่นแล้ว
try {
var aData:* = JSON.decode(e.result as String); //ทำการดีโค้ดค่าที่รับมาผ่าน JavaScript
} catch (e:Error) {
trace(e.message); //ถ้ามีข้อผิดพลาดก็จะมีบอกข้อผิดพลาดขึ้นที่คอนโซลของ Flex
return;
}
trace(aData.title); //แสดงผลค่าที่ได้มาจาก PHP
trace(aData.detail);
}
จะทำให้คอนโซลใน Flex แสดงผลลัพธ์ดังนี้
PHP to Flex test
parsing value from PHP to Flex
จากตัวอย่างจะเห็นว่าประโยชน์ของ RequestHelper คือการส่งค่าทั้งไปและกลับ Flex-PHP
Enjoy this article?
Consider subscribing to our RSS feed!
11:16 on May 12th, 2011
ขอบคุณครับสำหรับบทความดีๆ