2014-01-11 85 views
0

任何人都可以幫助或引導我找出爲什麼下面的代碼不能按預期運行(即警告來自php的回顯),而是提醒「發生了負面事件」?XMLHTTPREQUEST ONREADY狀態更改錯誤

我的JavaScript代碼如下:簡化讓這件事的工作

window.onload = function(){ 

    var regForm = document.getElementById("register").onsubmit = checkForm; 
} 

//Let's see if this user already exists 

function checkForm(){ 

alert("You pressed Register!"); 

var cc = document.getElementById("un3").value; 

    if (window.XMLHttpRequest){ 
     // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
     alert("You are using XML HTTP REQUEST"); 
    }else{ 
     // code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     alert("YOU ARE USING ACTIVE X OBJECT"); 
    } 

    xmlhttp.onreadystatechange=function(){ 
     if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
       alert(xmlhttp.responseText); 
      return false; 
      }else{ 
      alert("Something negative happened"); 
     } 
    } 

    xmlhttp.open("GET","user_exists.php?q="+cc,true); 
    xmlhttp.send(); 
} 

我的PHP文件:

<?php 

$q=$_GET["q"]; 

echo "something good happened"; 

?> 

回答

0

這是因爲onreadystatechangechanges when connecting before the result is there

試試這個:

xmlhttp.onreadystatechange=function(){ 
    if (xmlhttp.readyState==4) { 
     // only check when state is "the communication is done" 
     if (&& xmlhttp.status==200){ 
      alert(changes when connecting before the result is therexmlhttp.responseText); 
      return false; 
     }else{ 
       alert("Something negative happened"); 
    } else { 
      // ignore other states 
    } 
} 

更好的雖然是使用一個體面的JavaScript庫,如jQuery或道場,這樣你就不必做這一切你自己。

+0

是的,我有一種感覺,在結果出現之前,連接正在發生。不幸的是,我已經嘗試過你的建議,但它仍然無法正常工作。 :( – Tez

+0

說明「不工作」 –

+0

嘗試將響應狀態記錄到Javascript控制檯,以便您看到它實際上經歷了所有步驟。 –

0

試試這個:

xmlhttp.onreadystatechange=function(){ 
    if(xmlhttp.readyState==4){ 
     if(xmlhttp.status==200){ 
      alert(xmlhttp.responseText); 
      return false; 
     }else{ 
      alert("Something negative happened"); 
     } 
    } 
} 

的readyState來了好幾倍,並不總是與4 看看this question

我寧願拿出請求的響應,以保持我的代碼清潔。你的情況,這將是:

xmlhttp.onreadystatechange=responshandler; 

function responsehandler(){ 
    //here the response code 
} 

化妝確保強硬聲明var xmlhttp;之外的功能,使之全球化。

+0

感謝你的努力,但它仍然不是w爲我而來。 – Tez

+0

在'if(xmlhttp.readyState == 4)'之前放'alert(xmlhttp.readyState)'。它是否達到4? – Michel

+0

你確定'user_exists.php'的路徑是正確的嗎? – Michel