การรับข้อมูลจาก AJAX ที่เป็น Array
เนื่องจาก AJAX (Javascript) ไม่สามารถรับข้อมูลคืนกลับมาในรูป array ได้นอกจากในรูปของข้อความ ดังนั้นในการคืนค่ากลับมายัง AJAX เราจึงต้องแปลง array ให้อยู่ในรูปข้อความก่อนโดยการ นำ array มาเชื่อมต่อกันเป็นข้อความด้วยฟังก์ชั่น implode ครับ โดยที่ในการนำมาเชื่อมต่อกัน ตัวแยก (seperater) ควรเป็นตัวอักษรที่ไม่ได้ใช้งาน เช่นจากตัวอย่างค่าของ array เป็นตัวเลข ผมจังใช้ ตัวแยก เป็น , (comma) (หากเป็นข้อความควรเลือกเอาตัวอักษรที่คาดว่าจะไม่ได้ใช้งานจริงๆ เช่น | หรืออาจเป็น ASCII เช่น chr(1)-chr(8) ก็ได้)
โค้ดในหน้าที่เรียกใช้ AJAX ครับ
<input type="button" name="test" value="Get" onclick="getarray()">
<div id="result"></div>
<script type="text/javascript">
function getarray() {
//AJAX
var req = Inint_AJAX();
req.onreadystatechange = function () {
if (req.readyState==4) {
if (req.status==200) {
var ret=req.responseText //รับค่ากลับมา
datas=ret.split(',') //แยกกลับเป็น Array เหมือนเดิม
var d="" //แสดงผล ค่า Array ที่ได้รับกลับมา
for (n=0; n<datas.length; n++) {
d=d+" datas["+n+"] = "+datas[n]+"<br />"
}
document.getElementById("result").innerHTML=d //แสดงผล
}
}
};
//สร้าง connection
req.open("POST", "getarray.php", true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send(null); //ส่งค่า
}
</script>
โค้ดในหน้า getarray.php ที่ AJAX เรียกไป ทำการเชื่อมต่อข้อมูลในแอเรย์ด้วย comma (,) หรืออาจใช้ตัวอักษรอื่นก็ได้ที่เหมาะสม
<?
//สมมุติให้ทำอะไรก็ได้ แล้วได้ผลลัพท์เป็น Array
$result = array( 1 , 2 , 3 , 4 , 5 );
echo implode($result, ",");
?>
ในการรับค่ากลับมาของ AJAX เมื่อ AJAX ได้รับข้อมูลกลับ ข้อมูลจะอยู่ในรูปข้อความ 1,2,3,4,5 (ตามที่กำหนดใน getarray.php) ซี่งเราจะแปลงกลับให้เป็น array ของ Javascript ด้วยฟังก์ชั่น split ครับ
datas = ret.split( ',' ) //แยกกลับเป็น Array เหมือนเดิม
โดยที่ paramrter ที่ส่งให้ฟังก์ชั่นก็คือ ตัวแยก ที่เราใช้ในหน้า getarray.php ครับ (หากเราใช้ตัวแยกเป็น ASCII chr(1)-chr(8) เราจะใช้ตัวแยกใน Javascript เป็น String.fromCharCode(1)-String.fromCharCode(8) ครับ)