2

こんにちは、ユーザーが私のウェブサイトにサインアップしたときにデータベースをチェックして、選択したユーザー名がまだ存在していないことを確認し、存在するかどうかを確認したいと考えています。以下のコードは機能しませんが、何をしてもフォームに返されず、フォームは常に送信されます。なぜこうなった?助けてくれてありがとう

HTML

<form name="signup" action="Test1.php" onsubmit="return checkUser();" method="get">
Username: <input type="text" name="user" />
<input type="submit" value="Submit" />
</form>

Javascript

<script type="text/javascript" src="jquery-1.7.1.min.js"/></script>
<script type="text/javascript">
    function checkUser(){
        var userV = document.signup.user.value;
        $.ajax({
            url: "Test.php",
            type: "POST",
            data: {user:userV},
            success: function (response) {
                if(response=="0"){
                    //Username already exists notify user
                    return false;
                }else{
                    return true;
                }
            }
        });
    }
</script>

Test.php

<?PHP
    $user = $_POST['user'];
    if($user=="test"){
        die("0");
    }else{
        die("1")
    }
?>

Test1.php

<?PHP
    echo "Form submitted";
?>
4

2 に答える 2

3

サーバーが応答するまで実行が遅延される ajax 呼び出しreturnのコールバック内に値を入れます。success

onsubmit="return checkUser();"関数にtrueまたはのfalse値が必要ですcheckUser():

function checkUser(){

   if( stuff )
      return true;
   else
      return false;

}

とにかく、これは邪魔な JavaScript に依存しているため、全体的に悪いアプローチです。より良い解決策は、すべてのクライアント側ロジックをマークアップから移動することです。

HTML

<form name="signup" action="Test1.php" method="get">
    <label for="_user">Username:</label><input type="text" name="user" id="_user"/>
   <input type="submit" value="Submit" />
</form>

JS

<script>
// wrapping the code in a $(function(){ ... }); call delays its execution till document is loaded
$(function(){

$('form[name="signup"]').on('submit', function(event){

    // this prevents browser from actually following form url
    event.preventDefault();

    // a reference to the form to get used inside ajax callback
    var form = this;

    $.ajax({
         url: $(form).attr('action'),
         type: "POST",
         data: {user:$(form.user).val()},
         success: function (response) {
             if(response=="0"){

                alert('User exists!');

             }else{

                alert('User does not exist!');

             }
         }
     });

});

});
</script>

アラートがユーザーへの適切なメッセージである場合、またはより洗練された検証である場合 - これは単なる例です。

于 2012-08-24T17:40:32.533 に答える
1

リクエストが完了したときにコールバックが呼び出されるため、コールバックで戻りfalseますが、これは「遅すぎます」。明示的なe.preventDefault()orreturn falseを関数に追加することを検討してください。現在、「内部」関数でステートメントをundefined定義しているため、 が返されます。return

もちろん、ターゲット ページに手動で移動する必要があります。

または、呼び出しのasync パラメータを明示的に に設定します。$.ajax()false

于 2012-08-24T17:33:12.367 に答える