0

jQuery Validate プラグインを使用して、いくつかの JavaScript 検証を書き直しています。

発生した問題の 1 つは、ユーザー名が有効かどうかをチェックする関数です。これは、ユーザー名を含む ajax 呼び出しを送信することによって行われます。

リクエスト URL は次のようにする必要があります。

/ajax/check-username/usernamehere

現在の機能:

var checkUsername = function(value){
    var username = false;
    jQuery.ajax({
        url: "/ajax/check-username/" + encodeURI(value)
    }).done(function (data) {
        if (data.exists) {
            username = false;
        } else {
            username = true;
        }
    });
    return username;
}

jQuery Validate リクエスト パスは次のようになります。

/ajax/check-username/?username=usernamehere

jQuery 検証:

jQuery('#user').validate({
    rules: {
        username: {
            required: true,
            minlength: 6,
            remote: {
                url: '/ajax/check-username/'
            }
        }
    }
});

現在の URL ルーティングを使用するリモート メソッドを取得するにはどうすればよいですか?

4

1 に答える 1

0

元の JavaScript 関数は、データが存在するかどうかを確認します。

if (data.exists) {
    username = false;
} else {
    username = true;
}

ただし、ルールのドキュメントに従って、remotetrue検証に合格するにはサーバー スクリプトから戻る必要があります。他のほとんどの応答は、検証エラー メッセージをトリガーします。

"応答は JSON として評価され、有効な要素に対してである必要があり、既定のメッセージを使用してtrueany falseundefinedまたはnull無効な要素の場合、または文字列、たとえば、「その名前は既に使用されています。代わりに peter123 を試してください」として表示されます。エラーメッセージ。"

最善の解決策は、サーバー スクリプトを変更して、データが存在しないとき/ajax/check-username/に戻るようにすることです。それ以外の場合は、または目的のエラーメッセージのtrueいずれか。false


引用OP:

「現在の URL ルーティングを使用するリモート メソッドを取得するにはどうすればよいですか?」

短い答え:あなたはしません。

dataTypeリモート メソッドは、次のデフォルト設定を使用して、JSON としてサーバー スクリプトにデータを送信しています...

dataType: "json",
data: { nameOfTheElement: valueOfTheElement }

したがって、サーバー スクリプトを変更して、この JSON 形式の受信データを単純に受け入れることができます。

そうしないと、remote宣言時に設定を変更できます。

ドキュメントから取った例:

rules: {
    username: {
        required: true,
        minlength: 6,
        remote: {
            url: "/ajax/check-username/",
            type: "post",
            data: {
                username: function() {
                    return $( "#username" ).val();
                }
            }
        }
    }
}
于 2013-09-10T15:01:18.970 に答える