2013-12-22 43 views
0

我已經嘗試了類似性質的問題中提出的一切,但這個非常基本的代碼只是不工作。我只想在XMLHttpRequest的同一文件中接收來自php代碼的消息。JavaScript與XMLHttpRequest不工作​​

<!DOCTYPE html> 
<head></head> 
<body> 
<div id="qwer" style="height:50px;width:40px"></div> 
<script type="text/javascript"> 
function check() { 
    var ualias=document.getElementById('ualias').value; 
    var resu=document.getElementById("qwer"); 
    var params="username="+ualias; 
    var hm = new XMLHttpRequest(); 
    var url = "http://'my-domain-name'/try.php"; 
    hm.open("GET", url+"?"+params, true); 
    hm.onreadystatechange = function(){ 
     if(hm.readyState == 4 && hm.status == 200) { 
      var return_data = hm.responseText; 
      resu.innerHTML=return_data; 
     } else { 
      resu.innerHTML="error"; 
     } 
     hm.send(null); 
     resu.innerHTML="CHECKING..."; 
    } 
} 
</script> 
<?php if(isset($_GET['username'])) { 
    $u=$_GET['username']; 
    echo $u; 
    exit(); 
} ?> 
<input id='ualias' type='text' onblur=''> 
<button type='button' onclick="check()">Go!</button> 
</body> 
</html> 

瀏覽器(谷歌瀏覽器)未顯示爲onclick事件東西。

它終於奏效了。我做了以下編輯。

<!DOCTYPE html> 
    <head> 
    <title></title> 
    </head> 
    <body> 

    <script type="text/javascript"> 
    function check() 
    { 
     var ualias=document.getElementById('ualias').value; 
    var resu=document.getElementById("qwer"); 
    var params="username="+ualias; 
    var hm = new XMLHttpRequest(); 
     var url = "http://www.websamaj.in/try.php"; 
     hm.open("GET", url+"?"+params, true); 
     hm.onreadystatechange = function(){ 
    if(hm.readyState == 4 && hm.status == 200) 
    { 
     var return_data = hm.responseText; 
     resu.innerHTML=return_data; 

    } 
    } 
    hm.send(null); 
     resu.innerHTML="wait..."; 
    } 
    </script> 
<?php 
if(isset($_GET['username'])) 
{ 
    $u=$_GET['username']; 
    echo $u.",you are finally here!:)"; 
    exit(); 
} 
?> 
    <input id='ualias' type='text' onblur=''> 
<button type='button' onclick="check()">Go!</button> 
<div id="qwer" style="height:50px;width:100px;background-color:#CCC;"></div> 

    </body>  
    </html> 

顯然,onreadystatechange函數中的else條件導致了一個問題。如果有人能告訴我爲什麼會造成問題,我會很喜歡它。據我所知,每次狀態改變時都會調用onreadystatechange事件。因此,在我以前的代碼中,「錯誤」應該覆蓋三次div,然後,當狀態更改爲4和200時,responseText應該被覆蓋,因爲我沒有使用append。所以,一個解釋將得到高度肯定。謝謝!

+0

你確定這是一個JS問題,而不是PHP的問題? –

+0

調試控制檯中是否有錯誤?你可以檢查請求正在發送在網絡控制檯 –

+0

這是不需要在您的PHP:退出(); – Zarathuztra

回答

0

在你的原代碼,hm.send(null)resu.innerHTML="CHECKING"線實際上裏面的onreadystatechange回調:

hm.open("GET", url+"?"+params, true); 
hm.onreadystatechange = function(){ 
    if(hm.readyState == 4 && hm.status == 200) { 
     var return_data = hm.responseText; 
     resu.innerHTML=return_data; 
    } else { 
     resu.innerHTML="error"; 
    } 
    hm.send(null); // <-- wrong place! 
    resu.innerHTML="CHECKING..."; 
} 

在你編輯的版本,你感動他們離開那裏(固定縮進):

hm.open("GET", url+"?"+params, true); 
hm.onreadystatechange = function(){ 
    if(hm.readyState == 4 && hm.status == 200) { 
     var return_data = hm.responseText; 
     resu.innerHTML=return_data; 
    } else { 
     resu.innerHTML="error"; 
    } 
} 
hm.send(null); 
resu.innerHTML="wait..."; 

你沒有注意到這個原因是因爲在你編輯的版本中,你沒有正確地縮進你的塊。建議始終保持您的代碼格式一致,即使在黑客入侵時,也可以看到代碼塊。

+0

是的,我會記住這一點。謝謝。 – sam1993