A-AA+then

อาจารย์ค่ะ มีปัญหาเรื่องรัน AJAX บนอินเตอร์เน็ต

1,636
อาจารย์ค่ะ หนูมีปัญหาการใ้ช้งาน AJAX
ตอนรันบนอินเตอร์เน็ตค่ะ มันไม่สามารถส่งค่าต่างๆไปได้เลยค่ะ
ตอนที่รันบน localhost ไม่มีปัญหานะค่ะ 

หนูจำได้ว่าอาจารย์เคยแนะนำให้ดูเกี่ยวกับระดับความปลอดภัย 
หรือตรวจดูว่าได้เปิดใช้ XMLHTTP หรือยัง

หนูตรวจสอบไม่เป็นค่ะ อาจารย์ว่ามันจะเกี่ยวกับเรื่องที่อาจารย์เคยแนะนำหรือเปล่าค่ะ
อาจารย์ช่วยแนะนำวิธีทำให้หนูด้วยค่ะ

11 ความคิดเห็น

 ในเครื่องหนูลง IE7 กับ google chrome ไว้ค่ะ ไม่รู้ว่าจะเกี่ยวไหม
1

ลองดู path ไฟล์ว่าที่เรียกมาน่ะ เรียกถูกรึยัง มันหาเจอไหม

ลองเอาโค้ดในส่วน ajax มาลงดูครับ เผื่อจะได้เห็นปัญหาได้ง่ายขึ้น

IE7 กับ Chrome ผมว่าไม่น่าเกี่ยวกับตอนเอาขึ้น host จริงกับจำลองบนเครื่องเราเอง (localhost)

2

ลองมาใช้ firefox แล้วลง addon firebug ดีกว่าครับเพื่อการหา error javascript ที่ง่ายดายผิดตรงไหนรู้ตรงนั้นแล้วก็ สามารถดูค่าว่า ajax ส่งค่าอะไรไปได้บ้างแล้วค่าที่ตอบกลับคืออะไร
3

มัน Error หรือเปล่าครับ ถ้ามี มัน Error ว่าอะไร

ตอนรับค่า ได้ใช้ $_GET หรือ $_POST อย่างถูกต้องหรือเปล่า

path ที่เรียกไป ได้ระบุอย่างถูกต้องหรือเปล่า ถ้าไม่แน่ใจ ให้ระบุ URL ปลายทางแบบเต็มๆ และต้องเป็น URL เดียวกันกับที่ใช้งาน (ไม่สามารถเรียกข้ามโดเมนได้)

กำหนดการใช้ GET หรือ POST กับ Ajax อย่างถูกต้องหรือเปล่า 
4

ถ้าจะเรียกข้ามโดเมน ก็จะต้องพึ่ง json นะครับ *-*
5

มันไม่มี error อะไรเลยนะค่ะ
หนูทดสอบโดยการคลิกแล้วส่งค่าข้อมูลไป แล้วให้มัน alert ค่านั้นกลับมาแสดงมันก็ไม่มีอะไรตอบกลับมาเลยค่ะ ไม่มี error

โค้ดตอนส่งค่า
function ajaxTest(bt){
var data=getFormData("frmTest");
data+="&bt="+bt;
var URL="AjaxTest.php";
ajaxLoad("post",URL,data,null,null);
}

โค้ดตอนส่งข้อมูลเวลาคลิก
<a href="#" onclick="ajaxTest('AAA');">ทดสอบ</a>

โค้ดตอนแสดงผลข้อมูล alert
$links=trim($_POST['links']);
$js = <<<JS
alert("$links");
JS;
 
header("content-type: text/javascript; charset=tis-620");
$js=iconv('utf-8','tis-620',$js);
echo $js;

ช่วยด้วยค่ะ
6

จากคำถาม บอกว่าทดสอบบน localhost ได้ ข้อผิดพลาดอาจอยู่ที่ Server ครับ

เดาว่า เป็นเพราะมันหาไฟล์ไม่เจอครับ (ถ้าใช้ firefox ในการ debug จะได้คำตอบง่ายขึ้น)

ปัญหาอย่างหนึ่งซึ่งมักเกิดขึ้นบน Server แต่ไม่เกิดขึ้นกับ localhost และมักเกิดขึ้นกับ Server ประเภท linux มากกว่า windows ก็คือ

ปัญหาเกี่ยวกับขนาดตัวอักษรของชื่อไฟล์ครับ ซึ่ง linux จะมองตัวอักษร พิมพ์ใหญ่ และ พิมพ์เล็ก ต่างกัน

บน Server อาจมีไฟล์ ajaxtest.php อยู่ แต่โค้ดเรียก AjaxTest.php อาจหากันไม่เจอครับ

สิ่งที่ควรปฏิบัติให้เป็นนิสัยเมื่อจะเขียนโค้ดคือ สร้างไฟล์ทุกไฟล์ ด้วยตัวอักษรภาษาอังกฤษตัวพิมพ์เล็กเท่านั้นครับ
7

พิมพ์โค้ดผิดค่ะ
$bt=trim($_POST['bt']);

$js = <<<JS
alert("$bt");
JS;
 
header("content-type: text/javascript; charset=tis-620");
$js=iconv('utf-8','tis-620',$js);
echo $js;
8

1
อย่างแรกเลยตอนแรกตัวแปร data ใน ajaxTest(bt)
ผมว่าลองใส่ alert(data) ไปด้านล่างของ data+="&bt="+bt; เพื่อทดสอบก็ดีนะครับ
เพราะจากที่เห็นเนี่ย

var data=getFormData("frmTest");//ผมไม่รู้ว่ามันคืนค่ามาเป็นอะไร จากตัว getFromData()
data+="&bt="+bt; //ถ้าจากบรรทัดบนแล้วได้มาไม่ใช่ "?variable=" ก็อาจส่งไปแล้วไม่ได้้ข้อมูลกลับมาได้ครับ

ajaxLoad("post",URL,data,null,null);
ส่วนอันนี้ผมไม่เห็นในส่วน ajaxLoad() เลยบอกอะไรไม่ได้ว่า จริงๆแล้วโค้ดมันส่งอะไรไปให้ URL
ดังนั้นผมเลยอยากให้ลอง alert(data) ดูก่อนน่ะครับ

2
ในส่วน $js=<<<JS ลองไปโค้ดดูมันก็แค่ echo ออกมาเป็นข้อความธรรมดาไม่มีการทำงาน Javascript ผมก็เลยลองใส่ <script type="text/javscript">alert("$links");</script> แทนน่ะครับ

3
เวลาทดสอบ ลองทำ manual คนดูก่อนว่าใส่ url เป็นอะไร
หลังจากนั้นตอนโค้ดแล้วได้ data ที่ส่งใน AJAX ควรลอง alert(data) ดูก่อน จะได้รู้ว่ามันส่งอะไร ตามที่เราต้องการไหม
9

เห็นด้วยกับคุณ gOragod ครับ ไฟล์ทุกไฟล์ควรเป็นตัวเล็ก เพื่อง่ายตอนเราโค้ด
เพราะถ้าเป็น Linux Server มัน sensitive มากครับ เห็นตัวใหญ่กับตัวเล็กในตัวอักษรเดียวกันเป็นคนละตัว

เดาๆว่าปัญหาก็แค่ว่ามันหาไฟล์นั้นไม่เจอ (path ผิด) หรือไม่ก็ส่ง data ไปให้มันผิด (php มันเลยไม่เลยไม่ดึงมาใช้จึงไม่เกิดอะไร)

ปล.ผมเอาตัวหนาไม่ออกแหะ

10

ขอบคุณอาจารย์มากๆค่ะ หนูลองเปลี่ยนชื่อไฟล์เป็นตัวเล็กทุกไฟล์แล้ว ได้ผลค่ะ
แต่ถ้าหากมีปัญหาอะไรจะถามอาจารย์ใหม่นะค่ะ
11
^