-1

挿入されたユーザー名が既に存在するかどうかを確認するには、jQuery バリデーターでリモート フィールドを使用してサーブレットを呼び出す必要があります。問題は、JSONP で呼び出す必要があり、ブール値でも文字列でも返されず、代替可能な Json が返されることです。何か助けはありますか?

この方法を使用すると、常にユーザーが既に存在すると言われます!

    function parseUser(a){return a}

    $.validator.addMethod("checkUserUnique", function(value, element) {
    $.ajax({
        url:'myservletJSONP.do',
        data: {'username':function(){return $("#registration-form1 :input[name='username']").val()}},
        dataType: "jsonp",
        jsonp: false,
        jsonpCallback: 'parseUser',
        success: function(data){
            if(data[0].result=='exist'){
                return false;
            }else{
                return true;
            }
        },
        error: function(er){
            console.log("error: "+er);
        }
    })

});
4

2 に答える 2

0

はい、remoteルールはブール値を探しています。

これを達成できない場合は、代わりにカスタム ルールを作成して使用することもできます。カスタム メソッド内で、必要な関数を記述できます... を実行しajax、結果をテストreturn trueし、検証済みのフィールドを渡すだけです。

http://docs.jquery.com/Plugins/Validation/Validator/addMethod#namemethodmessage

jQuery.validator.addMethod("myRule", function(value, element) { 
    // your ajax
    // if ( your ajax result == "something" ) {
        // return false; // represents failed validation
    //} else {
        // return true; // represents passed validation
    //}
}, "failed - your custom message");

コールバックへの引数は次のとおりです。

  • 検証された要素の現在の
  • 検証される要素


$(document).ready(function() {
    $('#myform').validate({
        rules: {
            myfield: {
                myRule: true  // instead of remote
            }
        }
    });
});
于 2013-03-03T20:57:43.737 に答える
-1

それが答えです:

    $.validator.addMethod("remoteValidator", function(value, element, param) {
        var previous = this.previousValue(element);
        if (!this.settings.messages[element.name] ) {
            this.settings.messages[element.name] = {};
        }
        previous.originalMessage = this.settings.messages[element.name].remote;
        this.settings.messages[element.name].remote = previous.message;
        param = typeof param === "string" && {url:param} || param;
        if ( previous.old === value ) {
            return previous.valid;
        }
        previous.old = value;
        var validator = this;
        this.startRequest(element);
        var data = {};
        data[element.name] = value;
        $.ajax($.extend(true, {
            url: param.url,
            data: function(){return param.data || data}(),
            dataType: "jsonp",
            jsonp: false,
            jsonpCallback: param.callback,
            success: function( response ) {
                var valid = param.checkValidity(response) 
                if ( valid ) {
                    var submitted = validator.formSubmitted;
                    validator.prepareElement(element);
                    validator.formSubmitted = submitted;
                    validator.successList.push(element);
                    delete validator.invalid[element.name];
                    validator.showErrors();
                } else {
                    var errors = {};
                    var message = validator.settings.messages[element.name]["remoteValidator"];
                    errors[element.name] = message;
                    validator.invalid[element.name] = true;
                    validator.showErrors(errors);                       
                }
                previous.valid = valid;
                validator.stopRequest(element, valid);
            }
        }, param));
        return "pending";
});

この行をルールに追加して呼び出すことができます。

remoteValidator: {'url':'myServlet','checkValidity': function(resp){if(someStuff)return true; return false}                                         }
于 2013-03-14T10:29:25.570 に答える