A-AA+then

ฟังก์ชั่น window.localtion

2,469

อยากจะถามว่า โค๊ด 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>

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

ถ้าจำไม่ผิดต้องใช้แบบนี้น่ะครับ window.location = "edit.php"; ถ้าแบบนี้มันจะรองรับทุก browser ครับ
1

ใช้แบบนั้นแล้วก็ไม่ได้ค่ะ ทำยังไงช่วยบอกหน่อย
2

ถ้านำไปรันบน localhost ได้ค่ะ แต่ถ้านำไปรันบน server ไม่ได้ค่ะช่วยหน่อยนะค่ะ

3

มันฟ้อง error อะไรหรือป่าวครับ ทดสอบ
4

ไม่ฟ้องเลยค่ะ แต่ว่ามันไม่ redirect ไปหน้าที่ต้องการค่ะ
5

if(HttPRequest.responseText == 'Y')
  {
     alert(HttPRequest.responseText ); 

ลองตรวจสิบซิว่าค่าที่ส่งกลับถูกต้องหรือเปล่า
6

เป็นที่ ไฟล์ 'logincheck.php' หรือป่าวครับ บน server ตัวแปรที่ post ไปนะครับคุณได้เรียกใช้อย่างไร

$_POST['tUsername'] เพราะว่า server linux มันต้องเรียกตัวแปรแบบนี้จึงจะทำงานนะครับ แต่ server บน windows
มันรู้จัก หมดนะครับ 

7

ผมเจอปัญหาเหมือนกันครับ  ตรง if(HttPRequest.responseText == 'Y')  ถ้าให้ alert ในเงื่อนใขไม่มีอะรัยเกิดขึ้น แต่ถ้าให้ alert ก่อน ไม่มีปัญหาคือตัว Y ออก ครับ
 

8

alert(HttPRequest.responseText ); 
if(HttPRequest.responseText == 'Y'){
  alert(HttPRequest.responseText );
}

ลองตอบคำถามให้ได้ ว่า 2 ตัวนี้มีตัวไหน ถ้ามี อ่านได้ว่าอะไร

 
9

มีก่อน if ครับ และอ่านค่า Y มา ส่วนในเงื่อนไขไม่ทำงานครับ ให้ alert('OK'); ก็ไม่ขึ้น มันดันมาทำที่ else แทน

ยังงี้แสดงว่ามันเปรียบเทียบค่าไม่ได้หรือยังงัยครับ
10

แสดงว่า ค่าที่ส่งมา อาจไม่ใช่ Y

ความเป็นไปได้คือ

1.เป็น UTF-8 และ มี BOM แต่มองไม่เห็น การแก้ไขมีบนเว็บ

2.มีช่องว่าง หรือ อื่นๆ โดยไม่ได้ตั้งใจบนหน้าที่ตอบกลับของ Ajax

3.กำหนด Header ไม่ถูกต้อง หรือ ไม่ได้กำหนด ให้ลองกำหนด Header ให้เป็น text/html

วิธีการตรวจสอบ ลองใช้ alert(HttPRequest.responseText.length()) ถ้าเป็น Y ตัวเดียว ค่าที่ได้ควรเป็น 1
11

ผมลอง 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  ก็ยังเหมือนเดิม

12

ขออภัย

ลองใหม่อีกครั้งนะ ใช้ alert(HttPRequest.responseText.length())

ของเดิมตกตัว t
13

ครับ และผลลัพธ์เหมือนที่บอกเลยครับ 325
ถ้า ใส่ header("content-type: text/html; charset=TIS-620"); มันจะได้ 25 ครับ
14

ที่แน่ๆ คือ ไม่ได้ส่ง Y กลับมา...เพราะถ้ามีแค่ Y คำตอบควรจะเป็น 1

ตอนที่ alert(HttPRequest.responseText); ก็ได้ Y ออกมาหรือครับ ?

ลอง alert(encodeURIComponent(HttPRequest.responseText)); อีกทีครับ

ลองเปลี่ยน Browser

ลองทำให้เป็น UTF-8

ลองเปลี่ยน Server
15

เคยเจอปัญหาแบบนี้ครับ
ผมเปลี่ยนมา return ค่าตัวเลขแทน ใช้งานได้
แต่ยังไม่รู้วิธีแก้เหมือนกันครับ

16

    ในการ ทำให้เป็น UTF-8 with out BOM

    ของผมจะได้ นะ (ผมใช้ notepad++ อะครับ)

17
^