2013-12-22 40 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