Ce que vous cherchez est connu sous le nom d'AJAX, et il n'y a rien de difficile, surtout avec jQuery! Le problème avec l'envoi des données à PHP pour valider, c'est que ça va immédiatement nixer votre besoin de "vitesse" - le formulaire devrait être bloqué pendant que Javascript fait une demande au serveur pour voir si tout va bien. Pour cette raison, il est de pratique courante que la validation soit effectuée au côté serveur et côté client. Note Je dis les deux, comme vous devriez toujours valider les données sur le serveur.
Dans cet esprit, commençons! Je vais montrer comment valider un formulaire sans utiliser le plug-in de validation - pour les grands projets, vous voudrez peut-être considérer, mais il est assez facile sans elle:
<form id='myform' action='whatever.php' method='POST'>
First Name: <input type='text' name='first_name' class='required'><br>
Last Name: <input type='text' name='last_name'><br>
Email: <input type='text' name='email' class='required'><br>
Zip: <input type='text' name='zip'><br>
</form>
Comme vous pouvez le voir, nous avons d'abord nom et email avec une classe de besoin, afin que nous puissions faire ceci:
$(function() { // wait for the document to be loaded
$('#myform').submit(function() {
var valid = true; // assume everything is okay
// loop through each required field in this form
$('input.required', this).each(function() {
// if the field is empty, mark valid as false
// and add an error class
if($.trim($(this).val()) == '') {
valid = false;
$(this).addClass('error_input');
}
});
// additional validation for email, zip, perhaps
return valid; // if valid is true, continue form submission
});
});
Le plugin de validation fait tout cela un peu plus propre et plus propre à faire, mais si vous avez juste besoin de faire une forme rapide il n'y a rien de mal avec l'approche ci-dessus. Ca craint parce que vous devez avoir vos règles de validation à deux endroits, mais à part d'exécuter Javascript sur le serveur ou d'appeler le serveur pour les données, il n'y a pas d'alternative si vous voulez dire rapidement à vos utilisateurs que quelque chose ne va pas.
Espérons que cela aide.
EDIT: Il semble que j'ai mal compris votre question. Si vous voulez transmettre les données de formulaire à un script PHP, faites valider les valeurs et renvoient le succès ou l'erreur à la page sans charge, vous feriez quelque chose comme ceci:
$('#myform').submit(function() {
// allow submit if we've validated this already
if($(this).data('done')) return true;
var data = $(this).serialize(); // serialize the form data
// you could get the two variables below from the actual form (DRY)
// with $(this).attr('action'); and $(this).attr('method'); but I am
// not sure if that is what you want...
var action = 'validate.php'; // what script will process this
var method = 'POST'; // type of request to make
$.ajax({
type: method,
url: action,
data: data,
dataType: 'json',
success: function(d) {
if(d.code == 'success') {
// everything went alright, submit
$(this).data('done', true).submit();
} else {
alert('something is wrong!');
}
}
});
return false; // don't submit until we hear back from server
});
Et puis tout votre PHP script doit quelque chose comme cela est de retour, en utilisant json_encode
, pour indiquer si tout va bien ou non:
// verify everything...
// data will be in $_POST just like a normal request
if($everythingOK) {
$code = 'success';
} else {
$code = 'error';
}
print json_encode(array('code' => $code));
exit;
Je ne l'ai pas testé le Javascript ci-dessus, mais je suis sûr qu'il devrait être à peu près juste. J'espère que ce aide. :)
Merci pour la réponse!C'est intéressant et utile, mais pas exactement ce que j'avais en tête. Je sais que ma question laisse beaucoup à désirer ... Clarification: La "vitesse" que j'ai mentionnée, était la vitesse de mon propre code de mise en œuvre (courbe d'apprentissage superficielle) pas la vitesse de traitement de la page :-) Je veux juste le message généré par le serveur PHP (succès ou erreur) pour retourner à la page de soumission sans un nouveau pageload. Pas une nouvelle procédure de validation séparée. –