1

jQuery Validator を使用して、ユーザーがサインアップしているときに、目的のユーザー名が既に使用されているかどうかをサーバーに対してチェックしたいと考えています。PHP スクリプトuntaken.phpはこのジョブを実行しok、ユーザー名が使用可能かtakenどうか、または使用されているかどうかを返します。

ソース全体を以下に示しますが、問題の行は次のとおりです。

return data != "taken";

現在、「ユーザー名は既に使用されています」というメッセージが永続的に表示されます。ただし、次のように変更すると:

console.log( data != "taken" );

コンソールに表示されるテキスト ボックスに入力し、期待どおりのタイミングでメッセージを入力しますtruefalseこれが、設計自体に責任がないことを私が知っている方法です。それはsuccess、jQuery.ajax の句から何も返すことができないという事実です。

$.validator.addMethod("userCannotBeTaken", function(value, element){

        var check;

        check = $.ajax({
            type: "GET",
            url: "untaken.php",
            data: ({ "user" : value }),
            dataType: "text",

            success: function(data){
                return data != "taken"; //return false if taken or true if not, based on response
            }
        });


    }, "Username already taken");

内から何かを返すにはどうすればよいjQuery.ajaxですか?

4

3 に答える 3

1

私はすべてを考えすぎていたことが判明しました.jQuery Validatorの組み込みremoteメソッドで簡単に実行できます。誰かに役立つ場合の私のコードは次のとおりです。

バリデータ スクリプトのルール:

remote: "untaken.php"

PHP:

<?php

//mysql info
[snip]

//connect to database
$sql = new mysqli($mysql_host, $mysql_user, $mysql_password, $mysql_database);

//Populate variable
$newun = $sql->real_escape_string( $_GET['newuser'] );


//Do the actual checks

$un_already_taken = $sql->query("
    SELECT username FROM logins WHERE username = '$newun'
"); //check if UN already in DB

if($un_already_taken->num_rows > 0) //un taken already
    print "false"; //tell jQuery to not submit form
else
    print "true"; //tell jQuery all is good

「真」または「偽」を印刷するのと同じくらい簡単です。POSTではなくGET(つまり、URLパラメーター)を使用し、GET変数nameは検証しているフィールドのものであることに注意してください(私の場合newuser

于 2012-12-07T08:41:46.073 に答える
0

関数にデータを返すにはajax、結果をページに出力またはエコーする必要がありuntaken.phpます。

次のようなもの:

echo $result;exit;

次に、関数内のデータを警告しsuccess、結果をデバッグしてみてください

alert(data);return false;
于 2012-12-07T05:55:57.093 に答える