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()
部分この関数を宣言する行にヒットしますが、関数には入りません。
をサーバーの応答を待っている要求に何もしていないので - すなわちonreadystatechangeにコールバック –
外である必要があります@ JaromandaXなんて頭がおかしいの?私は関数の外でrequest.move(params)を移動しなければなりませんでした。ありがとう – JackVanier