0
私は現在AJAXログインシステムで作業していますが、応答は返されません。私はexit("error here")
スクリプトを実行すると応答を返すだけですが、JSON応答を返したいとします。PHP - AJAXログインが動作しない
マイ形式:
<div id="account" class="modal" role="dialog">
<div class="modal-dialog">
<form method="post" id="login-form">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Sign in</h4>
</div>
<div class="modal-body">
<p>
Email address:<br />
<input type="email" class="form-control" placeholder="Email address" name="user_email" id="user_email" />
</p>
<p>
Password:<br />
<input type="password" class="form-control" placeholder="Password" name="password" id="password" />
</p>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<button type="submit" class="btn btn-default" name="btn-login" id="btn-login">LOGIN</button>
</div>
</div>
</form>
</div>
</div>
私はJavaScript:
$("#btn-login").click(function(e) {
alert('submit');
var data = $("#login-form").serialize();
alert(data);
$.ajax({
url: 'ajax.php',
type: 'POST',
data: data,
success: function(response) {
var data = response.responseText;
var resp = $.parseJSON(data);
if (resp.error) {
alert('error: ' + response);
} else {
alert('success: ' + response);
}
}
});
event.preventDefault();
});
マイPHP:誰もが私が間違ってやっている
if(isset($_POST['user_email']) && is_ajax()) {
$engine->expireLoginAttempts();
$engine->expireLoginBan();
if(!$engine->isLoginBanned()) {
$email = strip_tags($_POST['user_email']);
$password = strip_tags($_POST['password']);
if($engine->doLogin($email,$password)) {
$engine->expireBan();
if($maintenanc['value'] == '1' && !$engine->isStaff()) {
echo json_encode(array(
'success' => '0',
'message' => 'You can\'t login using a regular account because the site is currently under maintenance.'
));
} elseif($engine->isBanned() && !$engine->isOwner()) {
// Account banned; notify and give a timestamp + reason
$stmt = $engine->runQuery("SELECT timestamp, expiration, reason FROM banned WHERE user_id=:user_id");
$stmt->execute(array(':user_id'=>$_SESSION['user_id']));
$userRow = $stmt->fetch(PDO::FETCH_ASSOC);
$blockdate1 = strtotime('+' . $userRow['expiration'], strtotime($userRow['timestamp']));
$blockdate2 = date('d-m-Y H:i:s', $blockdate1);
echo json_encode(array(
'success' => '0',
'message' => 'This account is suspended until ' . $blockdate2 . ' because of the following reason: ' . $userRow['reason'] . '.'
));
} else {
echo json_encode(array(
'success' => '1',
'message' => $_SESSION['user_name'];
));
}
} else {
// Create login attempt if the account exists and the ip is different from the register ip
$stmt = $engine->runQuery("SELECT user_email, user_id, user_ip FROM users WHERE user_email=:email");
$stmt->execute(array(':email'=>$email));
$userRow = $stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount() == 1 && $userRow['user_ip'] !== $_SERVER["REMOTE_ADDR"]) {
$engine->createLoginAttempt($userRow['user_id'], $_SERVER["REMOTE_ADDR"]);
}
// Bruteforce attack suspected, bans the ip after 10 attempts from an unknown ip
$attemptban = $engine->runQuery("SELECT * FROM loginattempt WHERE ip=:ip");
$attemptban->execute(array(':ip'=>$_SERVER["REMOTE_ADDR"]));
if($attemptban->rowCount() > 4) {
if($engine->loginban()) {
$engine->deleteLoginAttempts($_SERVER["REMOTE_ADDR"]);
}
}
echo json_encode(array(
'success' => '0',
'message' => 'Emailaddress and/or password invalid.'
));
}
}
}
を知っていますか?私はjson_encode
を入力してexit
を試しましたが、それぞれjson_encode
の後にexit()
を入れても、何も動作していないようです。
あなたはJSONレスポンスを自分で解析する必要はありません。 jQueryはこれを行うことができます。単に 'dataType: 'json''を設定してください – Phil
1)' $ .ajax'リクエストにエラーハンドラを追加してください。署名は 'error:function(jqXhr、textStatus、errorThrown)'です。 2)ブラウザの* Network *コンソールでPOSTリクエストを確認します。応答はどのように見えますか? – Phil
私は '$("#btn-login ")の代わりに' $( "#login-form")submit'を使用します。フォームは、テキストフィールドに "Enter"キーを押して送信することができ、ボタンクリックを聞くだけでそれを逃すことができます – Phil