Ceci est en partie une continuation de ce fil: jquery - return value from callback function (in post request) into the function its inside of? parce que je mis à jour le code, mais le problème persiste. Je valide un simple formulaire html avec jquery, et malgré tous mes autres if/else, l'appel ajax n'est jamais fait. Voici le code javascript:forme jquery validateur ne fait jamais appel ajax
var pass_form = $ ('# pass_form'); pass_form.submit (valid_pass_sett);
function valid_pass_sett() {
//remove old errors - snipped
pass_old = $('input[name=pass_old]').val();
pass_new = $('input[name=pass_new]').val();
pass_confirm_new = $('input[name=pass_confirm_new]').val();
if (pass_old === "") {
//display error on form - snipped
return false;
} else if (pass_new === "") {
//display error on form - snipped
return false;
} else if (pass_new != pass_confirm_new) {
//display error on form - snipped
return false;
} else if (pass_new.length < 8) {
//display error on form - snipped
return false;
} else {
$.post("http://www.example.com/ajax/validate.php",{ // async validation
type: 'valid_old_change_pass',
pass_old: pass_old,
pass_new: pass_new
}, valid_pass_combo_callback);
alert('after the ajax call...');
}
return false; // cancel form submission
}
et voici la partie pertinente du validate.php:
$username = $_SESSION['username'];
$pass_old = $_POST['pass_old'];
$pass_new = $_POST['pass_new'];
if (empty($pass_old) || empty($pass_new)) {
echo "invalid";
} else if (!User::valid_user_pass($username, $pass_old)) {
echo "invalid_old";
} else if (!Sanitize::is_legal_password($pass_new)) {
echo "invalid_new";
} else {
echo "valid";
}
Quand je suis débogage avec Firebug, et toutes les autres entrées de formulaire sont corrects, le script arrive à l'appel ajax, puis soumet le formulaire, même s'il est supposé appeler la fonction de rappel. Ceci est le code de la fonction de rappel:
function valid_pass_combo_callback(data) {
if (data == 'valid') {
//only if the form is valid!
pass_form[0].submit();
}
else if (data == "invalid_old") {
//display error on form - snipped
}
else if (data == "invalid_new") {
//display error on form - snipped
}
else {
//it always jumps to here..., even though data *is* the correct value
}
}
EDIT Redux: Ok, je fixe l'erreur dans ma fonction de rappel, comme on le voit dans la première réponse, et maintenant, un peu d'un autre problème a émergé. J'ai débogué la fonction valid_pass_combo_callback
et il obtient la valeur correcte de validate.php; dans ce cas, invalid_old
est la valeur renvoyée. Quand je débogue, data
est égal à invalid_old
. Cependant, la comparaison échoue ... donc le code toujours saute à la dernière instruction else, quoi qu'il arrive. Rien ne se passe, car il n'y a pas de comportement là-bas, alors pourquoi la comparaison échoue-t-elle toujours? EDIT, RESOLU: J'ai décidé de renoncer à lier cette fonction à soumettre, et à la place liée à un événement onclick pour un bouton sur le formulaire (que j'utilise à la place d'un bouton d'envoi) et qui a résolu le problème. La validation est appelée lorsque le bouton est cliqué, et si la validation côté client réussit, le formulaire est soumis au serveur pour validation.
Cela a résolu le problème initial; J'ai ajouté plus de détails à ma question, cependant, parce que maintenant j'ai un autre problème où la comparaison * toujours * échoue, bien que 'data' stocke la bonne valeur de validate.php. –
Vous devriez faire une nouvelle question pour le nouveau problème. – FishBasketGordo
fait: http://stackoverflow.com/questions/7043708/data-returned-from-ajax-always-failing-in-comparison Merci encore pour l'aide. –