2017-03-24 10 views
1

javacriptが埋め込まれたPHPでサインアップページを作成しようとしていますが、現在のユーザー名が使用されているかどうかを私に知らせるAJAXリクエストが表示され、そのことを知らせるメッセージが表示されます。XMLHttpRequest.onreadystatechange関数をスキップ

のindex.php:

<?php 
    require_once 'functions.php'; 
    //Javascript code to see if username is available 
    echo <<<_END 
     <script> 
     function checkUser(user) { 
      if(user.value == '') { 
       document.getElementById('available').innerHTML = '' 
       return 
      } 

      params = "user=" + user.value 
      request = new ajaxRequest() 
      request.open("POST", "checkuser.php", true) 
      request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
      request.setRequestHeader("Content-length", params.length); 
      request.setRequestHeader("Connection", "close"); 

      request.onreadystatechange = function() { 
       //NEVER GET INTO THIS FUNCTION 
       console.log("ON READY STATE CHANGE FUNCTION"); 
       if(this.readyState == 4 && this.status == 200) { 
        document.getElementById('available').innerHTML = this.responseText; 
       } 
       request.send(params) 
      } 
     } 

     function ajaxRequest() { 
      try { 
       var request = new XMLHttpRequest() //Probably going to be this one 
      } catch(e1) { 
       //Other types of requests 
       request = false 
      } 
      return request 
     } 
     </script> 
_END; 
//More php code here that i deemed not relevant 
?> 

<html> 
    <h1>Sign Up</h1><body> 
     <form class = "form-signin" role = "form" 
     action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']); 
     ?>" method = "post"> 
     <label for="username">Username:</label> 
     <input name="user" type="text" onBlur="checkUser(this)"><span id="available"></span><br> 
     <label for="password">Password:</label> 
     <input name="pass" type="password"><br> 
     <button class = "btn btn-lg btn-primary btn-block" type="submit" name="login"><br> 
    </body> 
</html> 

そして、ここではcheckuser.phpです:

<?php 
    require_once 'functions.php' 
    if(isset($_POST['user'])) { 
     $username = $_POST['user']; 
     $result = querySQL("SELECT * FROM USER 
           WHERE username='$username'"); 
     if($result->num_rows) { 
      echo "This username is taken"; 
     } else { 
      echo "This username is available"; 
     } 
    } 
?> 

今、私はFirefoxでデベロッパーコンソールにコードを追跡し、すべてがを除いて正常に動作しているように見えますindex.phpのrequest.onreadystatechange = function()部分この関数を宣言する行にヒットしますが、関数には入りません。

+2

をサーバーの応答を待っている要求に何もしていないので - すなわちonreadystatechangeにコールバック –

+0

外である必要があります@ JaromandaXなんて頭がおかしいの?私は関数の外でrequest.move(params)を移動しなければなりませんでした。ありがとう – JackVanier

答えて

0

問題はあなたのPHPコードにあります。

onreadystatechangeは、サーバーからの応答を受信した場合、または要求タイムアウトが発生した場合にのみ起動します。

あなたがrequest.send(data)やAjaxはあなたが決して `request.send(のparams)`ためだ

関連する問題