1

私がやろうとしていることから始めます。

ユーザーがメールアドレスを入力すると、(正しい場合) リセットリンクが記載されたメールが送信される「パスワードを忘れた」システムを作成しました。

入力された電子メールがデータベースにあるかどうかを検出するフォーム ページに ajax の小さなセクションがあります。メールデータベースに存在する場合、フォームの色が緑色に変わり、送信ボタンが有効になります。電子メールが検出されない場合、フォームは赤色のままになり、送信ボタンは無効になります。

ここに画像の説明を入力

問題は、電子メール アドレスを入力するときに、ユーザーが正しい電子メールよりも 1 文字多く入力すると、キーアップ イベントが発生するように見えることです (基本的に、hello@ 123.comがデータベースにある場合、hello@123 と入力する必要があります。送信を有効にするためのcom1 )

これが私の JSFiddleで、ajax 以外のすべてが機能しています。

ajax ファイル自体の例を次に示します。

<?php

session_start();

$Email = $_POST['email'];

//Parse ini file containing database information
$databaseInfo = parse_ini_file("optiMizeWebReport.ini", true);

global $con;

//Connect to database
$con = @mysqli_connect($databaseInfo['optiMizeDatabaseConnection']    ['WebServer'],$databaseInfo['optiMizeDatabaseConnection']['Username'],     $databaseInfo['optiMizeDatabaseConnection']['Password'],     $databaseInfo['optiMizeDatabaseConnection']['DBName']);

//Check connection and output error if invalid
if(!$con)
{
    die('Connect Error ('. mysqli_connect_errno() .') '.mysqli_connect_error());
}

//Execute query
$result = mysqli_query($con, "SELECT COUNT(*) FROM login WHERE Email='$Email'")
or die("Error: ".mysqli_error($con));

//Initialize
$emailMatch = array();

//Extract
while($emailMatch[] = mysqli_fetch_array($result))


print_r($emailMatch[0][0]);

?>

他に役立つ情報があれば教えてください。ありがとう。

編集:

迅速な修正/回答がまだないように思われるため、何が起こるかを正確に示す短いビデオを作成しました。ここで見ることができます: https://www.youtube.com/watch?v=P-2Gz5b4ek8

4

3 に答える 3

2

Ajax リクエストは非同期です。あなたの場合if(databaseCheck != 1)、値を確認すると、databaseCheck以前のajaxの応答です。そのため、最後の結果を取得するには、余分な文字を 1 つ入力する必要があります。

$('input').bind("keyup", function() {
    $.ajax({
           type: "POST",
           url: "ForgotPasswordAjax.php",
           data: {email: $('#email').val()},
           success: function(output){
               console.log(output);
               notification(output);
           }
    });
});
function notification(databaseCheck) {
    if (databaseCheck != 1) {
        ....
    } else {
        ....
    }
}

成功した部分でこのような関数を呼び出すと、これらのコードが ajax の成功後に実行されることが保証されます。現在の問題は解決しますが、同時 ajax 呼び出しを防ぐ必要があります。最初のリクエスト応答の最後のjsがその応答で通知を設定する場合、どのリクエストが最初に返されるかわかりません。したがって、それを防ぐために処理フラグを追加する必要があります。

于 2013-10-30T12:36:51.880 に答える
0

jQuery には、 という別のイベントがありinputます。

$('#email').bind("input", function() {

更新されたjsFiddle

于 2013-10-30T10:26:10.497 に答える
0

JsFiddleを更新しました。

ここにキーダウンとフォーカスを含めました

$('#email').bind("keyup keydown change focus blur", function() {

行の下に変更します

 $('input').bind("keydown", function() {
于 2013-10-30T09:49:54.770 に答える