jQuery validateur et une règle personnalisée qui utilise AJAX
J'ai lu votre réponse concernant le jQuery validateur où vous décrire une méthode pour vérifier un nom d'utilisateur à l'encontre d'une valeur dans une base de données.
J'ai essayé de la mise en œuvre de cette méthode, mais peu importe, ce qui est retourné à partir du fichier PHP, je reçois toujours le message que le nom d'utilisateur est déjà pris.
Voici sat méthode personnalisée...
$.validator.addMethod("uniqueUserName", function(value, element) {
$.ajax({
type: "POST",
url: "php/get_save_status.php",
data: "checkUsername="+value,
dataType:"html",
success: function(msg)
{
//if the user exists, it returns a string "true"
if(msg == "true")
return false; //already exists
return true; //username is free to use
}
})}, "Username is Already Taken");
Et voici le valider le code...
username: {
required: true,
uniqueUserName: true
},
Est-il une manière que je suis censé renvoyer le message à partir de php.
Grâce
Un
Vous devez vous connecter pour publier un commentaire.
Vous faites une requête AJAX, ergo: la validation est déjà fini de travailler lors de votre validateur personnalisé renvoie vrai ou faux.
Vous aurez besoin de travailler avec
async
. Voir aussi ce post: Comment puis-je obtenir jQuery pour effectuer une synchrone, plutôt que asynchrone, requête Ajax?Quelque chose comme:
Avertissement:
Pour quelqu'un d'autre qui tombe sur ce, valider prend en charge à distance de méthode, qui ne peut pas avoir existé en 2010:
https://jqueryvalidation.org/remote-method/
Il m'a fallu une éternité pour comprendre comment obtenir un jsonified chaîne contenant la valeur d'un élément dans la page en la demande à distance - c'est le résultat d'une combinaison de beaucoup d'heures et d'essayer de nombreux résultats de recherche.
Points clés:
async:false
a été abandonné,l'appel de la fonction juste après
remote:
est la clé pour la création de la chaîne de données avec la valeur de l'élément. Essayez d'accéder à une valeur actuelle de la forme aprèsdata:
était de retourner une valeur vide pour le champ avecdataType
définir comme json..Page ASPX:
Code C# Derrière:
Mise en forme de l'objet de réponse:
1. async:false has been deprecated,
.. Oui, MAIS c'est encore autorisé à condition que vous utilisez le bon de rappel/gestionnaire telle que (complete:
,success:
,error:
) plutôt qu'une Promesse méthode telle que.then
ou.done
... Voir la référence suivante ici ==> bugs.jquery.com/ticket/11013#comment:40Voici ma "vieille école" bidouille...
Ci-dessous une fonction d'utilité qui permet l'utilisation de "asynchrone" validations avec des "jquery.validate.js" de la bibliothèque. Cette fonction crée un décalage entre l'utilisateur frappes sinon, la fonction de validation "validFunc" sera appelé "tous les temps", ce qui n'est pas très performatif, dans certaines circonstances, et particulièrement problématique pour les fonctions qui effectuent des validations sur "server-side"/"backend" (appels ajax essentiellement). De cette façon, le "validFunc" validation de la fonction n'est appelée lorsque l'utilisateur arrête de taper pendant une certaine période de temps, ce qui permet aussi un "en temps réel" de validation (
"onkeyup": true
sur jqv paramètres), comme cela se produit pendant que l'utilisateur est en train de taper.IMPORTANT: Validations impliquant l'utilisation de la "jqvAsyncValid" la fonction doit toujours être la dernière à éviter les conflits avec les autres en raison de l'asynchronisme.
RÉPONSE CODE: