2013-12-22 3 views
0

Я пробовал все предлагаемое в вопросах подобного характера, но этот очень простой код просто не работает. Я просто хочу получить сообщение от php-кода в том же файле, используя XMLHttpRequest.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> 

браузер (Google Chrome) не показывает ничего для 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> 

По-видимому, условие else там, в функции onreadystatechange, вызывало проблему. Мне бы это понравилось, если бы кто-нибудь мог сказать мне, почему именно это создает проблему. Насколько я знаю, событие onreadystatechange вызывается каждый раз, когда изменяется состояние. Поэтому в моем предыдущем коде «ошибка» должна быть перезаписана трижды в div, а затем, когда состояние изменится на 4 и 200, responseText должен быть перезаписан, так как я не использовал append. Таким образом, объяснение будет высоко признано. Спасибо!

+0

Вы уверены, что это проблема js, а не проблема php? –

+0

Есть ли ошибка в консоли отладки? Можете ли вы проверить запрос на отправку в сетевой консоли –

+0

Это не нужно в вашем PHP: exit(); – 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

Смежные вопросы