2013-04-17 1 views
0

Я пытаюсь использовать Ajax (Javascript + php), чтобы проверить, доступно ли имя пользователя, когда пользователь меняет фокус на другое поле формы. Мои функции работают только тогда, когда у меня есть предупреждение(), если я удалю их, функции перестанут работать.Javascript функции работают только с некоторыми «alert()» в нем

Еще одна странная вещь: alert(requestObject.readyState); показывает только состояние 1. Насколько я понимаю, он должен показывать все состояния или, по крайней мере, состояние 4.

Это мой код javascript, он находится в заголовке HTML-страницы.

var requestObject = false; 
    function funcReceiveData() 
    { 
     alert(requestObject.readyState); 
     if(requestObject.readyState == 4) 
     { 
      if(requestObject.status == 200) 
      { 
       var status = requestObject.responseText; 
       if(status == "ok") 
       { 
        document.getElementById('userValid').innerHTML = 'Valid user'; 
       } 
       else 
       { 
        document.getElementById('userValid').innerHTML = 'Choose another username'; 
       } 
      } 
     } 
    } 

if (window.XMLHttpRequest) 
{ 
    requestObject = new XMLHttpRequest(); 
} 
else if(window.ActiveXObject) 
{ 
    requestObject = new ActiveXObject("Microsoft.XMLHTTP"); 
} 

function checkUser() 
{ 
    if(requestObject){ 
     requestObject.open("POST", "addUser.php", true); 
     requestObject.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
     var user = document.getElementById('username').value; 
     var tobesent = "username=" + user; 
     requestObject.send(tobesent); 
     requestObject.onreadystatechange = funcReceiveData(); 
     alert(tobesent); 
    } 
} 

Это часть тела моего HTML код:

<BODY> 
<form method="POST" action="addUser.php"> 
    <table> 

     <tr> 
      <td><strong>Username:</strong></td> 
      <td><input type="text" name="username" size="25" onblur="checkUser();" id="username"></td> 
      <td><i id='userValid'>bla</i> 
     </tr> 

     <tr valign="top"> 
      <td><strong>Password:</strong></td> 
      <td><input type="password" name="password" size="25"></td> 
     </tr> 

     <tr valign="top"> 
      <td><strong>Frist name:</strong></td> 
      <td><input type="text" name="Fname" size="25"></td> 
     </tr> 

     <tr valign="top"> 
      <td><strong>Last name:</strong></td> 
      <td><input type="text" name="Lname" size="25"></td> 
     </tr> 

     <tr valign="top"> 
      <td><strong>Address line 1:</strong></td> 
      <td><input type="text" name="address1" size="50"></td> 
     </tr> 

     <tr valign="top"> 
      <td><strong>Address line 2:</strong></td> 
      <td><input type="text" name="address2" size="50"></td> 
     </tr> 

     <tr valign="top"> 
      <td><strong>City:</strong></td> 
      <td><input type="text" name="city" size="25"></td> 
     </tr> 

     <tr valign="top"> 
      <td><strong>Postcode:</strong></td> 
      <td><input type="text" name="postcode" size="25"></td> 
     </tr> 

     <tr valign="top"> 
      <td><strong>Phone:</strong></td> 
      <td><input type="text" name="phone" size="25"></td> 
     </tr> 

     <tr valign="top"> 
      <td><strong>Mobile:</strong></td> 
      <td><input type="text" name="mobile" size="25"></td> 
     </tr> 

     <tr valign="top"> 
      <td><strong>Email:</strong></td> 
      <td><input type="text" name="email" size="25"></td> 
     </tr> 
     <tr> 
      <td><input type="submit" value="Submit" /></td> 
      <td><input type="reset" value="Clear" /></td> 
     </tr> 
    </table> 
</form> 

Мой PHP код ниже, это очень глупый код только для проверки. После проверки имени пользователя в базе данных.

<?php 
$user = $_POST['username']; 
if($user == "Tiago") 
    echo("ok"); 
else 
    echo("Error"); 
?> 

У меня есть страница, размещенная в этом адресе: https://devweb2012.cis.strath.ac.uk/~ntb13105/WAD/tests/Twig/FINAL/addUser.html

Кто-нибудь есть какие-либо понятия о том, что происходит?

ответ

2

Вы являетесь , вызываяfuncReceiveData вместо того, чтобы использовать его как обработчик события readyStateChange.

Это не работает, потому что в этот момент HTTP-запрос не получил ответа. Придерживание предупреждения в нем задерживает попытку прочитать значение requestObject.readyState, пока вы не нажмете OK, что достаточно долго для ответа.

Удалите () и назначьте обработчик событий перед отправкой запроса.

requestObject.onreadystatechange = funcReceiveData; 
requestObject.send(tobesent); 
+0

Спасибо !!! Теперь работает :) –

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