แบบว่าเพิ่งหัดเล่นครับ… ปัญหาคือเวลากรอก ภาษาอังกฤษมันไม่ error แต่ พอเป็น ภาษาไทย มันฟ้องว่า
XML Parsing Error: undefined entity Location: http://little-cow.sianscripts.com/PROJECT/AJAX1/quickstart.php?name=%E0%B8%AA Line Number 1, Column 67:
รบกวนดู ตัวอย่างที่นี่ ครับ
อันนี้เป็นตัวอย่าง code ผมไปเอามาจาก ที่นี่ ครับ http://www.packtpub.com/files/Ajax_SampleChapter.pdf
1. quickstart.html
<html>
<head>
<title>ทดสอบ AJAX with PHP : Quickstart</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="quickstart.js"></script>
</head>
<body onload='process()'>
กรุณากรอกชื่อของท่าน ครับ :
<input type="text" id="myName" />
<div id="divMessage" />
</body>
</html>2. quickstart.js
// สร้าง object xmlHttp จาก function createXmlHttpRequestObject()
var xmlHttp = createXmlHttpRequestObject();
function createXmlHttpRequestObject(){
// กำหนดตัวแปร เอามาซักอัน
var xmlHttp;
// ทำการตรวจสอบว่า web brower เป็น IE หรือชนิดอื่น เช่น firefox,opera
if(window.ActiveXObject){
try{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch (e){
xmlHttp = false;
}
}else{
try{
xmlHttp = new XMLHttpRequest();
}catch(e){
xmlHttp = false;
}
}
if(!xmlHttp)
alert("ไม่สามารถสร้าง XMLHttpRequest object ได้ครับ");
else
return xmlHttp;
}
// Process นี้จะเริ่มทำงานเมื่อ Browser เรียก ไฟล์ quickstart.html
function process(){
// ทำการตรวจสอบ readyState ของ xmlHttp โดย ถ้า state
// 0 = ยังไม่เริ่มทำงาน
// 1 = กำลังมีการถ่ายโอนข้อมูล
// 2 = โอนถ่ายข้อมูลเสร็จแล้ว
// 3 = อยู่ระหว่างการทำงาน
// 4 = เสร็จสิ้นการทำงานอย่างสมบูรณ์
if(xmlHttp.readyState == 4 || xmlHttp.readyState == 0){
// ทำการดึงค่าข้อมูลจาก form ที่ user กรอกในไฟล์ quickstart.html
//name = encodeURIComponent(document.getElementById("myName").value);
var name = document.getElementById("myName").value;
// นำค่าที่ดึงมาได้ แล้วส่งผ่านไปให้ไฟล์ quickstart.php ต่อไปโดย method GET
xmlHttp.open("GET","quickstart.php?name="+name, true);
// ตรวจสอบ response โดยฟังก์ชั่น handleServerResponse
xmlHttp.onreadystatechange = handleServerResponse;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
xmlHttp.send(null);
}else{
setTimeout('process()',1000);
}
}
// function นี้จะทำงานทันทีเมื่อ มีการรับข้อความจาก server
function handleServerResponse(){
// ตรวจสอบว่า เสร็จสิ้นการทำงานจาก server สมบูรณ์
//if(xmlHttp.readyState == 4){
// ตรวจสอบว่า การถ่ายโอนข้อมูล เสร็จสมบูรณ์
if(xmlHttp.status == 200){
// ทำการ แตกข้อมูล ที่ส่งมาจาก server ผ่านมา โดย XML
//xmlHttp.setContentType("text/xml;charset=UTF-8");
xmlResponse = xmlHttp.responseXML;
// ทำการ ดึง element ต่างๆ ที่อยู่ใน โครงสร้างของ XML ออกมา
xmlDocumentElement = xmlResponse.documentElement;
// ดึงข้อมูลออกมา โดยเรารู้ว่าข้อมูลที่ส่งมาให้เรานั้นอยู่ element แรกของ XML
helloMessage = xmlDocumentElement.firstChild.data;
// แสดงผลที่หน้าจอ
document.getElementById("divMessage").innerHTML = '<i>' + helloMessage + '</i>';
// หลังจากนั้น ก็เรียกไปเรื่อยๆๆ เพราะถ้าหากมีการ update ในการกรอก ก็เริ่มไปทำตั้งแต่ function process() ใหม่ ทุกๆ 1 วินาที
setTimeout('process()',1000);
}else{
alert("There was problem accesing the server : " + xmlHttp.statusText);
}
//}
}2. quickstart.php
<? header("Content-Type: text/xml; charset=utf-8"); echo '<?xml version="1.0" encoding="utf-8" standalone="yes" ?>'; echo '<response>'; $name = $_GET['name']; $userNames = array('SOMSAK', 'ARREERAT', 'WATTANA'); if(in_array(strtoupper($name), $userNames)) echo "สวัสดีครับ, อิๆ คุณเป็นคนพิเศษของเรา ".htmlentities($name); else if(trim($name)=='') echo "อ่าว , แล้วคุณเป็นใครละเนี่ย โปรดบอกชื่อ ด้วย คร๊่าบบ !"; else echo htmlentities($name).", คุณคงต้องกรอกชืออีกครั้งหล่ะครับ"; echo '</response>'; ?>
กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น
ก่อนอื่นต้องออกตัวก่อนนะครับ ว่าผมก็เป็นคนนึงที่เริ่มศึกษา Ajax เหมือนกัน'; ';
ผมลองแก้ดังนี้ครับแล้ว ใช้งานได้ครับ
<?
header("Content-Type: text/xml; charset=UTF-8");
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
echo '
$name = $_GET['name'];
$userNames = array('SOMSAK', 'ARREERAT', 'WATTANA');
if(in_array($name, $userNames))
echo "สวัสดีครับ, อิๆ คุณเป็นคนพิเศษของเรา ".$name;
else if(trim($name)=='')
echo "อ้าว , แล้วคุณเป็นใครละเนี่ย โปรดบอกชื่อ ด้วย คร๊าบ !";
else
echo $name.", คุณคงต้องกรอกชืออีกครั้งหล่ะครับ";
echo '
?>
แล้วเปลี่ยน Encoding ของทุกไฟล์ เป็น UTF-8 ครับ
ลองดูนะครับ
ขอบคุณครับผม...
อืมม แต่ก็ยังไม่ได้ครับ ผมลอง save เป็น UTF-8 แล้วนะครับแต่ก็ยังไม่ได้ครับ
คือตอนนี้ผม พยายามให้ ทุกไฟล์เป็น UTF-8 ให้หมดครับ โดยเฉพาะในส่วนของการส่งข้อมูลและการแสดงผลที่เป็นภาษาไทย (จริงๆแล้วเคยลองไปใช้ tis-620 เหมือนกันครับ มันก็ได้นะครับ แต่ผมอยากทำให้มันเป็น UTF-8 ให้หมดครับ)
ขอบคุณครับ อีกครั้งครับ..
ลองเปลี่ยนเป็น
htmlentities($name, ENT_COMPAT, "UTF-8");ลองแล้วครับแต่ก็ยังไม่ได้ครับ...
งั้นผมขอถามเพิ่มครับ
จากตัวอย่างสมมติ ว่าผม กรอก ห ตัวเดียว มันจะฟ้องอย่างนี้
XML Parsing Error: undefined entity Location: http://localhost/AJAX/UTF/quickstart.php?name=%E0%B8%AB Line Number 1, Column 67:
ตรงที่มัน return มา %E0%B8%AB มันเป็นรหัสอะไรเหรอครับ
มันเป็น UTF-8 รึเปล่าครับ...ผมคิดว่าผมอาจจะต้องเอาตรงนี้ผมา convert เพื่อให้ แสดงผลเป็นภาษาไทยให้ได้ อีกทีครับ แต่ ผมไม่รู้ว่ามันเป็น รหัส อะไรอ่ะครับ
คงต้องรบกวนอีกรอบครับ..ขอบคุณทุกท่านมากครับ
%E0%B8%AB คือ "ห" นั่นแหล่ะครับ
ในตาราง utf8 ภาษาไทยเรามี prefix คือ E0
แต่ดู error แล้วเหมือนกับมีปัญหาเรื่อง XML Parser
่ผมไม่เคยใช้ php นะเลยไม่รู้ว่าเกี่ยวกับอะไร
เหมือนจะได้แล้วนะ