मैं jQuery सत्यापन प्लगइन के लिए डेटा विशेषताओं का उपयोग कर रहा हूँ। मुझे "रिमोट" सत्यापन फ़ंक्शन का उपयोग करने की आवश्यकता है, हालांकि, मुझे उस डेटा के आधार पर दूरस्थ स्थान पर भेजे जा रहे डेटा को संशोधित करने की आवश्यकता है जिस पर इसका उपयोग किया जाता है। मैं डेटा विशेषताओं का उपयोग करना चाहता हूं और प्रत्येक फॉर्म के लिए <script> कॉल नहीं बनाना चाहता हूं।

मैंने इसे संभालने के लिए एक कस्टम $.validator.addMethod बनाया, लेकिन हर बार जब मैं इसे चलाता हूं, तो फॉर्म वापस आ जाता है जैसे कि यह false लौटा रहा हो। मैंने यह सुनिश्चित करने के लिए console.log() पर एक कॉल जोड़ा है कि डेटा या तो true या false वापस आ रहा है और यह दूरस्थ स्क्रिप्ट पर आधारित है और यह है। यह जब चाहिए तब true लौटाता है और false जब होना चाहिए।

यहाँ मेरी कस्टम addMethod है:

$.validator.addMethod("dupcheck", function(value,element){
    var method = element.getAttribute("data-method");
    var data = { "dupcheckv" : value, "dupcheckm" : method };
    $.post( "duplicate-check.php", data).done(function(response){
        console.log(response);
        return response;
    });
});

मैंने jquery "$.post" कैसे बनाया जाए, इस पर एक नज़र डाली। अनुरोध तुल्यकालिक [डुप्लिकेट] , लेकिन async:false पदावनत कर दिया गया है ताकि कोई मदद न मिले।

0
tvirelli 6 सितंबर 2019, 00:07

1 उत्तर

सबसे बढ़िया उत्तर

मैंने इसे सभी remote फ़ंक्शन की प्रतिलिपि बनाकर काम किया और इसे addMethod कॉल में डाल दिया:

$.validator.addMethod("dupcheck", function(value, element, param, method){
    if ( this.optional( element ) ) {
        return "dependency-mismatch";
    }

    method = typeof method === "string" && method || "dupcheck";

    var previous = this.previousValue( element, method ),
        validator, data, optionDataString;

    if ( !this.settings.messages[ element.name ] ) {
        this.settings.messages[ element.name ] = {};
    }
    previous.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];
    this.settings.messages[ element.name ][ method ] = previous.message;

    param = typeof param === "string" && { url: param } || param;
    optionDataString = $.param( $.extend( { data: value }, param.data ) );
    if ( previous.old === optionDataString ) {
        return previous.valid;
    }

    previous.old = optionDataString;
    validator = this;
    this.startRequest( element );
    data = {};
    data[ "dupcheckv" ] = value;
    data[ "dupcheckm" ] = element.getAttribute("data-method");
    $.ajax( $.extend( true, {
        mode: "abort",
        port: "validate" + element.name,
        dataType: "json",
        method: "POST",
        data: data,
        context: validator.currentForm,
        success: function( response ) {
            var valid = response === true || response === "true",
                errors, message, submitted;

            validator.settings.messages[ element.name ][ method ] = previous.originalMessage;
            if ( valid ) {
                submitted = validator.formSubmitted;
                validator.resetInternals();
                validator.toHide = validator.errorsFor( element );
                validator.formSubmitted = submitted;
                validator.successList.push( element );
                validator.invalid[ element.name ] = false;
                validator.showErrors();
            } else {
                errors = {};
                message = response || validator.defaultMessage( element, { method: method, parameters: value } );
                errors[ element.name ] = previous.message = message;
                validator.invalid[ element.name ] = true;
                validator.showErrors( errors );
            }
            previous.valid = valid;
            validator.stopRequest( element, valid );
        }
    }, param ) );

    return "pending";
});
0
tvirelli 6 सितंबर 2019, 02:45