ajax ใช้กับ firefox ไม่ได้ แต่ใช้กับ IE ได้ ช่วยเช็คให้หน่อยนะค่ะ
พอดีว่าเพิ่งหัดเขียน ajax ค่ะ ลองเปิดใช้กับ ie ก็ได้ผลแต่พอใช้กับ firefox ทำไมไม่ได้ผล ช่วยเช็คโค้ดให้หน่อยนะค่ะ
Code (JavaScript)
function ajaxLoad (method, URL, data, displayId){
var ajax = null;
if(window.XMLHttpRequest) {
ajax = new XMLHttpRequest();
}
else if(window.ActiveXObject){
ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
//======
if(ajax == null){
alert("Your Browser doesn't support Ajax");
return;
}
ajax.open(method, URL,true);
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.onreadystatechange = function(){
if(ajax.readyState==4 && ajax.status==200){
var type = ajax.getResponseHeader("content-type");
type = type.toLowerCase();
if(type.match("text/javascript"))
eval(ajax.responseText);
else{
var el = document.getElementById(displayId);
el.innerHTML = ajax.responseText;}
}
}
ajax.send(data);
}
มีปุ่มเรียกฟังก์ชันนี้ค่ะ
Code (JavaScript)
function ajaxCall(){
var URL = "check.php";
URL += "?rand="+ Math.random();
var userlog = document.getElementById('userlog').value;
var passlog = document.getElementById('passlog').value;
var data = "userlog="+ userlog +"&passlog="+ passlog;
ajaxLoad('POST',URL,data,'dv');
}
check.php
Code (PHP)
session_start();
include ("inc/connect.php");
$user = $_POST["userlog"];
$pass = base64_encode($_POST["passlog"]);
if(empty($user))
{
exit("กรุณากรอกชื่อผู้ใช้");
}
if(empty($pass))
{
exit("กรุณากรอกรหัสผ่าน");
}
$sql = "select * from member where m_user = '$user' and m_pass = '$pass'";
$query =mysql_query($sql)or die(mysql_error());
$num= mysql_num_rows($query);
$row = mysql_fetch_array($query);
if($num == 1)
{
$_SESSION['m_user']= $user;
$_SESSION['m_status']= $row['m_status'];
header("content-type: text/javascript;");
echo "alert('เข้าสู่ระบบเรียบร้อยแล้ว');";
echo "window.location.reload();";
}
else
{
echo "ข้อมูลไม่ถูกต้อง";
}
ปล.เพิ่งเคยตั้งกระทู้ที่นี่ ถ้าผิดพลาดก็ขออภัยด้วยนะค่ะTag : PHP, Ajax
Date :
2010-09-18 02:26:42
By :
starter
View :
2521
Reply :
14
อ่อ รู้แล้วค่ะว่าปัญหาที่ทำให้ไม่สามารถแสดงข้อมูลได้ อยู่ที่ readyState ค่ะ คือที่ IE จะเป็น 1, 2, 3 สถานะสุดท้ายเป็น 4
แต่ที่ Firefox จะเป็น 2,3 ,4 แล้ว 1 ค่ะ ajax.responseText เลยไม่แสดง มีวิธีแก้ยังไงดีค่ะ
Date :
2010-09-19 15:10:41
By :
starter
เพิ่งทราบเหมือนกันครับว่ามันเรียงไม่เหมือนกัน แต่เห็นเขียนกัน ในเงื่อนไงที่ว่า
if(ajax.readyState==4 && ajax.status==200)
ก็เห็นใช้เหมือนกันไม่ต้องแยก เข้าใจเอาเองว่ามันจะวนแบบไหนก็ตาม ให้มันมาจบตรง 4 ละก้อเป็นอันใช้ได้
อยากขอดู code เต็มๆครับ ที่ว่าใช้ใน IE ได้ ขอครบ ทั้งส่วน html javascript และ php เลย ถ้ามีคำอธิบายด้วย จะช่วยได้มาก เพราะตอนนี้งง ไม่ทราบว่าจะทดสอบได้ยังไง
ยังคาใจเรื่องปีกกา แต่ถ้าคุณตรวจดี แล้ว ก็แล้วไปครับ
Date :
2010-09-19 19:56:03
By :
สกล
index.php
<html>
<head>
<script src="inc/ajax.js" language="javascript" type="text/javascript" ></script>
<script type="text/javascript">
function ajaxCall(){
var URL = "check.php";
URL += "?rand="+ Math.random();
var userlog = document.getElementById('userlog').value;
var passlog = document.getElementById('passlog').value;
var data = "userlog="+ userlog +"&passlog="+ passlog;
ajaxLoad('POST',URL,data,'dv');
}
</script>
</head>
<body>
<table width="98%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="23">ชื่อผู้ใช้งาน</td>
<td><input name="userlog" type="text" id="userlog" size="15" /></td>
</tr>
<tr>
<td>รหัสผ่าน</td>
<td><input name="passlog" type="password" id="passlog" size="15"/></td>
</tr>
<tr>
<td> </td>
<td><button onclick = "ajaxCall();">Login</button></td>
</tr>
<tr>
<td colspan="2"><div id="dv" class="warn"></div></td>
</tr>
</table>
</body>
</html>
มีปุ่มเรียกใช้ฟังก์ชัน ajaxCall() แล้วใน ajaxCall() ก็เรียกฟังก์ชัน ajaxLoad() ในไฟล์ ajax.js
ส่งข้อมูลไปไฟล์ check.php
ประวัติการแก้ไข 2010-09-19 23:16:36
Date :
2010-09-19 23:15:08
By :
kid1412
โค้ดไม่ผิดครับถูกแล้วแต่ลืมขั้นตอนหนึ่งไป
check.php ควรแปลงไฟล์ให้เป็น utf8 ด้วยครับ ติดเรื่องส่งค่าภาษาไทยกลับมา ภาษาไทยมันเพี้ยน ทำให้เข้าคำัสั่ง eval มันเลยไม่ทำงานตามไปด้วย
Date :
2010-09-20 00:43:02
By :
xbeginner01
ไม่น่าเพี้ยนนะค่ะ
ใน Firefox ลองเช็คโดยใช้ alert แสดงค่า ajax.readyState วางไว้ก่อนตำแหน่งเช็คใน if(ajax.readyState==4 && ajax.status==200)
ผลปรากฏว่า ค่าที่ได้คือ 2 แล้ว 3 แล้ว 4 (หลังจากนี้ก็แสดงผลตามปกติค่ะ) พอมาที่สเต็ท 1 ข้อมูลก็หายไปค่ะ คือสเต็จมันแปลกๆนะค่ะ มีวิธีแก้มั๊ยค่ะ
IE สเต็จปกติดีค่ะ (1 2 3 4)
ขอบคุณที่ช่วยหาให้นะค่ะ
ประวัติการแก้ไข 2010-09-20 02:04:33 2010-09-20 02:08:45
Date :
2010-09-20 02:03:37
By :
kid1412
ผมลองทดสอบดู โดย ตัดทอนคำสั่งใน check.php ลงบ้าง เพราะไม่มีฐานข้อมูล เหมือน จขกท. ผลคือมันน่าจะใช้ได้นะครับ
ผมตัด check.php เหลือเพียงนี้ โดยไม่ได้แก้ไข code ส่วนอื่นเลย
check.php
<?php
session_start();
$num = 1;
if($num == 1)
{
$_SESSION['m_user']= "x";
$_SESSION['m_status']= "y";
header("content-type: text/javascript;");
echo "alert('เข้าสู่ระบบเรียบร้อยแล้ว');";
echo "window.location.reload();";
}
else
{
echo "ข้อมูลไม่ถูกต้อง";
}
?>
ผลคือมัน alert ได้ครับ
ผมสรุปว่า code มันใช้ได้ ถ้าจะผิดพลาด ก็ต้องเป็นส่วนที่ผมตัดออก ในส่วน js น่าจะ ok ครรับผม
oops ลืมไป ผมดันไปใช้ chrome ทดสอบครับ ไว้ว่างจะลองใหม่
ประวัติการแก้ไข 2010-09-20 08:24:21
Date :
2010-09-20 08:22:01
By :
สกล
ลองทดสอบในไฟร์ฟอกซ์ แล้ว ด้วยการตัด code เรื่องบานข้อมูลออกไปเหลือเพียง
session_start();
$user = $_POST["userlog"];
$pass = base64_encode($_POST["passlog"]);
if(empty($user))
{
exit("กรุณากรอกชื่อผู้ใช้");
}
if(empty($pass))
{
exit("กรุณากรอกรหัสผ่าน");
}
$num = 1;
if($num == 1)
{
$_SESSION['m_user']= $user;
$_SESSION['m_status']= $_pass;
header("content-type: text/javascript;");
echo "alert('เข้าสู่ระบบเรียบร้อยแล้ว ".$_POST["userlog"] ." pass ".$_POST["passlog"]." ');";
echo "window.location.reload();";
}
else
{
echo "ข้อมูลไม่ถูกต้อง";
}
พบว่าใช้ได้ครับ ผมว่าดีเสียด้วย ขอเอาไอเดียไปใช้เลย
Date :
2010-09-20 12:53:37
By :
สกล
ได้แล้วค่ะ โค้ด ajax หรือ php ไม่ผิดจริงๆค่ะ ปัญหาอยู่ที่ HTML 55+
พอดีในโค้ดติดแท็กฟอร์มอยู่ที่ table นั้นอ่ะค่ะ ของ IE ไม่เป็นปัญหา แต่ Firefox หลังจากกดปุ่มแล้วจะโหลดหน้านั้นใหม่
เลยมองไม่เห็นข้อมูลที่ ajax ส่งกลับมาค่ะ
ถามเรื่องนึงค่ะ IE 7 สามารถสร้างอ็อบเจ็คต์ได้สองแบบเลยหรอค่ะ คือลองเช็คแล้วได้ทั้งสองเลยอ่ะ
ขอบคุณที่สละเวลาช่วยหาให้นะค่ะ
Date :
2010-09-20 17:28:39
By :
kid1412
All modern browsers (IE7+, Firefox, Chrome, Safari, and Opera) have a built-in XMLHttpRequest object.
xmlhttp=new XMLHttpRequest();
Old versions of Internet Explorer (IE5 and IE6) uses an ActiveX Object:
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
แต่ไม่รู้ว่า IE7 จะใช้ ActiveX Object: ได้หรือเปล่า
Date :
2010-09-21 17:30:31
By :
สกล
ตกลงต้องแก้ตรงไหนอะครับ ผมก็เป็นเหมือนกัน งง เลย ใช้งานไม่ได้
Date :
2011-08-24 15:42:21
By :
bluesix
Load balance : Server 01