(function ($) { $.fn.bootstrapValidator.validators.remote = { html5Attributes: { message: 'message', url: 'url', name: 'name' }, /** * Request a remote server to check the input value * * @param {BootstrapValidator} validator Plugin instance * @param {jQuery} $field Field element * @param {Object} options Can consist of the following keys: * - url * - data [optional]: By default, it will take the value * { * : * } * - name [optional]: Override the field name for the request. * - message: The invalid message * @returns {Boolean|Deferred} */ validate: function(validator, $field, options) { var value = $field.val(); if (value == '') { return true; } var name = $field.attr('data-bv-field'), data = options.data; if (data == null) { data = {}; } // Support dynamic data if ('function' == typeof data) { data = data.call(this, validator); } data[options.name || name] = value; var dfd = new $.Deferred(); var xhr = $.ajax({ type: 'POST', url: options.url, dataType: 'json', data: data }); xhr.then(function(response) { dfd.resolve($field, 'remote', response.valid === true || response.valid === 'true'); }); dfd.fail(function() { xhr.abort(); }); return dfd; } }; }(window.jQuery));