ฟังก์ชั่น window.localtion
อยากจะถามว่า โค๊ด ajax ทำไม window.locationในโค๊ดของ ajax มันไม่ทำงานค่ะ คือมันไม่ ทำการ redirect ไปหน้าที่ต้องการค่ะช่วยดูให้หน่อยนะค่ะ
<script language="JavaScript">
var HttPRequest = false;
function doCallAjax() {
HttPRequest = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
HttPRequest = new XMLHttpRequest();
if (HttPRequest.overrideMimeType) {
HttPRequest.overrideMimeType('text/html');
}
} else if (window .ActiveXObject) { // IE
try {
HttPRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
HttPRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!HttPRequest) {
alert('Cannot create XMLHTTP instance');
return false;
}
var url = 'logincheck.php';
var pmeters = "tUsername=" + encodeURI( document.getElementById("txtUsername").value) +
"&tPassword=" + encodeURI( document.getElementById("txtPassword").value );
HttPRequest.open('POST',url,true);
HttPRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
HttPRequest.setRequestHeader("Content-length", pmeters.length);
HttPRequest.setRequestHeader("Connection", "close");
HttPRequest.send(pmeters);
HttPRequest.onreadystatechange = function()
{
if(HttPRequest.readyState == 3) // Loading Request
{
document.getElementById("mySpan").innerHTML = "Now is Loading...";
}
if(HttPRequest.readyState == 4) // Return Request
{
if(HttPRequest.responseText == 'Y')
{
window.location.href = "edit.php";
}
else
{
document.getElementById("mySpan").innerHTML = HttPRequest.responseText;
}
}
}
}
</script>
ถ้านำไปรันบน localhost ได้ค่ะ แต่ถ้านำไปรันบน server ไม่ได้ค่ะช่วยหน่อยนะค่ะ
{
alert(HttPRequest.responseText );
ลองตรวจสิบซิว่าค่าที่ส่งกลับถูกต้องหรือเปล่า
เป็นที่ ไฟล์ 'logincheck.php' หรือป่าวครับ บน server ตัวแปรที่ post ไปนะครับคุณได้เรียกใช้อย่างไร
$_POST['tUsername'] เพราะว่า server linux มันต้องเรียกตัวแปรแบบนี้จึงจะทำงานนะครับ แต่ server บน windows
มันรู้จัก หมดนะครับ
ผมเจอปัญหาเหมือนกันครับ ตรง if(HttPRequest.responseText == 'Y') ถ้าให้ alert ในเงื่อนใขไม่มีอะรัยเกิดขึ้น แต่ถ้าให้ alert ก่อน ไม่มีปัญหาคือตัว Y ออก ครับ
if(HttPRequest.responseText == 'Y'){
alert(HttPRequest.responseText );
}
ลองตอบคำถามให้ได้ ว่า 2 ตัวนี้มีตัวไหน ถ้ามี อ่านได้ว่าอะไร
ยังงี้แสดงว่ามันเปรียบเทียบค่าไม่ได้หรือยังงัยครับ
ความเป็นไปได้คือ
1.เป็น UTF-8 และ มี BOM แต่มองไม่เห็น การแก้ไขมีบนเว็บ
2.มีช่องว่าง หรือ อื่นๆ โดยไม่ได้ตั้งใจบนหน้าที่ตอบกลับของ Ajax
3.กำหนด Header ไม่ถูกต้อง หรือ ไม่ได้กำหนด ให้ลองกำหนด Header ให้เป็น text/html
วิธีการตรวจสอบ ลองใช้ alert(HttPRequest.responseText.length()) ถ้าเป็น Y ตัวเดียว ค่าที่ได้ควรเป็น 1
ผมลอง alert(HttPRequest.responseText.lengh()) มันออกเป็น 325 หมายความว่างัยหรอครับ
<?php
$strclient = trim($_POST["client"]);
if(trim($strclient) == "")
{
echo " <img src='../../images/icon/close.png'><br>";
echo"<font color=red>**Plase input data</font>";
exit();
}
//*** Check Username (already exists) ***//
$strSQL = "SELECT * FROM client WHERE nme_client = '".$strclient."' ";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
$objResult = mysql_fetch_array($objQuery);
if($objResult)
{
echo "<img src='../../images/icon/close.png'><br>";
echo"<font color=red>** This Clients Ready..</font>";
}
else
{
//echo "<img src='../../images/icon/check.png'>";
echo "Y";
}
mysql_close($conn);
?>
นี้คือ code ฝั่งตรวจสอบข้อมูล ผมลองใส่ header เป็นแบบ text/html ก็ยังเหมือนเดิม
ลองใหม่อีกครั้งนะ ใช้ alert(HttPRequest.responseText.length())
ของเดิมตกตัว t
ถ้า ใส่ header("content-type: text/html; charset=TIS-620"); มันจะได้ 25 ครับ
ตอนที่ alert(HttPRequest.responseText); ก็ได้ Y ออกมาหรือครับ ?
ลอง alert(encodeURIComponent(HttPRequest.responseText)); อีกทีครับ
ลองเปลี่ยน Browser
ลองทำให้เป็น UTF-8
ลองเปลี่ยน Server
เคยเจอปัญหาแบบนี้ครับ
ผมเปลี่ยนมา return ค่าตัวเลขแทน ใช้งานได้
แต่ยังไม่รู้วิธีแก้เหมือนกันครับ
ในการ ทำให้เป็น UTF-8 with out BOM
ของผมจะได้ นะ (ผมใช้ notepad++ อะครับ)