Réponse d'erreur de jQuery Valider à distance ne fonctionne pas
Je suis en utilisant le remote
méthode de jQuery de Validation pour vérifier si un nom d'utilisateur existe déjà dans le système. Le script does_user_exist.php
retourne 1
si l'utilisateur existe.
$registration.find(".username").each(function() {
var $this = $(this);
$this.rules('add', {
remote: {
url: "does_user_exist.php",
type: "post",
dataType: "json",
data: {uname: function(){ return $this.val(); } },
async: false,
success: function (data) { //returns 1 if user exists
if (data) {
console.log("false!");
return "Sorry, that user already exists." //doesn't work
//return false; //doesn't work
//return data; //doesn't work
//return {"string"}; //doesn't work
//return {0: "string"};//doesn't work
} else {
console.log("true!");
return true;
}
}
},
messages: {
remote: jQuery.format("{0}") //doesn't work
//remote: "Simple string doesn't work here either"
}
});
});
Mon problème est que le message d'erreur n'est jamais affiché. Je peux voir de mon console.log
de sortie qu'il a correctement les journaux false!
lorsque l'utilisateur existe, mais le message d'erreur n'apparaît jamais.
Comme vous pouvez le voir dans le commentaire sur les lignes, j'ai été à essayer de comprendre exactement ce que je fais mal via deviner et vérifier, sur l'hypothèse que je suis en quelque sorte le retour de la chaîne d'erreur dans le mauvais format, mais je ne suis pas avoir de succès.
Edit3:
J'ai été en mesure d'obtenir le backend réponse à être changé. Le PHP est maintenant en envoyant JSON codé true
/false
, en vain. Nous avons essayé d'envoyer le backend de réponse dans l'une des manières suivantes, mais le plugin ne semble pas être l'attraper n'importe ce que nous faisons:
json_encode( false )
json_encode( '["false"]' )
json_encode( "false" )
json_encode( ["false"] )
"false"
false
NULL
""
0
Aussi loin que je peux dire sur la base des documents, l'un d'eux doit avoir travaillé:
L'évaluation de la réponse JSON et doit être vrai pour les éléments valides,
et peut-être tout faux, indéfini ou null pour les éléments invalides, à l'aide de
le message par défaut;
Remarque, la réponse à cette question peut être liée à ce problème.
Voici le code révisé:
$registration.find(".username").each(function() {
var $this = $(this);
remote: {
url: "does_user_exist.php",
type: "post",
data: {entityExistence: function(){return $this.val();} },
success: function(data){ console.log(data); }
},
messages: {
remote: "Sorry, that username is not available."
}
});
Le script PHP est toujours de retour true
ou false
correctement. Selon la documentation, de tout, sauf pour true
devrait déclencher le message d'erreur. Mais le message d'erreur ne vient pas jusqu'à. Je sais que les messages d'erreur est de travailler parce qu'il y a d'autres contrôles fonctionnent très bien (par exemple,rangelength
, retiré de collé le code ici pour plus de clarté).
En passant, oui j'ai lu la documentation, spécifiquement cette partie: l'évaluation de La réponse JSON et doit être vrai pour les éléments valides, et peut-être tout faux, indéfini ou null pour les éléments invalides, en utilisant le message par défaut; ou une chaîne de caractères, par exemple. "Ce nom est déjà pris, essayez peter123 au lieu de" pour afficher le message d'erreur.
En citant aussi: "doit être
true
pour les éléments valides" ~ ne revient true
lorsque l'utilisateur n'existe pas? Est votre 1
être interprété comme une chaîne ou comme true
? Nous savons déjà 1
n'est pas "false, indéfini ou null"Oui, c'est ce que la documentation est en train de dire. Par "réponse", il désigne la réponse de votre serveur de script: "réponse est évaluée comme JSON et être
true
pour la validité des éléments, et peut être tout faux, indéfini ou null pour les éléments invalides..."Vous n'avez pas besoin de
return
quelque chose en particulier par l'intermédiaire de votre JavaScript. Les docs sont de parler de ce qui vient à partir de votre serveur.
OriginalL'auteur brentonstrine | 2013-10-15
Vous devez vous connecter pour publier un commentaire.
Ok, enfin compris, au hasard. Le
success
de rappel a été apparemment ruiner tout. Tout ce que j'avais à faire était de supprimer ce:Dès que je l'ai fait, tout s'est parfaitement déroulé comme prévu à l'aide de chaînes simples réponses:
et
Je ne peux pas expliquer cela, mais j'espère que quelqu'un les mises à jour de la documentation! J'ai remarqué que l'utilisation de
complete
ne pas casser la façon dontsuccess
.echo "true";
ouecho "false"
.La documentation dit: "Le serverside réponse doit être une chaîne JSON qui doit être
true
..." mais c'est pour mieux justeecho 'true';
ouecho 'false';
et oublier le JSON partieOriginalL'auteur brentonstrine
Unfortunatley les réponses ci-dessus sont un peu cryptique.
Pour qu'il fonctionne, vous devez le suivre JS.
Et votre backend code doit être en cours d'exécution le vérifier si l'email est valide ou non, et de retourner le résultat sous la forme d'un message au sein d'une chaîne json. par exemple,
Exemple backend code:
Espère que cela aide à toute personne qui rencontre le problème!
OriginalL'auteur André Figueira
La documentation pour le
télécommande
méthode états:Devis OP:
Cela peut être le contraire de ce que vous voulez. Depuis
1
peut être interprété commetrue
, qui raconte le plugin, il est "passé" de validation. Comme par docs, si l'utilisateur existe et que vous voulez déclencher un message d'erreur, la réponse doit êtrefalse
,undefined
,null
, ou une chaîne de caractères (le message).avez-vous essayé
echo "true"
? Voir: stackoverflow.com/a/18862144/594235OriginalL'auteur Sparky
Retour de la chaîne de caractères ne s'affichent pas automatiquement. Si vous voulez l'afficher, vous devez faire quelque chose comme ceci:
OriginalL'auteur Neil Girardi