2009-10-01 7 views
0

J'ai un problème avec le plugin de validation jQuery et la règle de validation à distance, utilisé en combinaison avec le plugin de formulaire jQuery. Donc j'utilise le plugin jQuery form pour intercepter pour former une sous-requête et si la validation échoue, le formulaire n'est pas soumis. Cependant, si la règle distante est déjà validée (en attente d'une réponse du serveur), le formulaire sera quand même envoyé.jQuery remote validation condition de concurrence

Si c'est avant, ou après que tout fonctionne bien, comme le font les autres règles que j'ai pour le formulaire. Mais si je suis au milieu du GET pour la règle distante, alors $ ('# myform'). Validate.form() retournera vrai, et le formulaire est soumis.

Ainsi, le code ressemble à ceci:

$('#myform').ajaxForm({ 
    beforeSubmit: processRequest, 
    success: processResponse, 
    dataType: 'json' 
}); 

$('#myform').validate({ 
    rules: { 
     onkeyup: false, 
     title: { 
      required: true, 
      remote: { url: 'check_title.php' } 
     } 
    } 
}); 

function processRequest(formData, jqForm, options) { 
    if (!$('#myform').validate.form()) { 
     // cancel the form submition 
     return false; 
    } 
    // do some stuff 
    return true; 
} 

est-il un moyen de forcer attendant en attente de validation à distance? Ou peut-être que je ne laisserais que 'onsubmit: true' dans les règles de validation, donc je serais sûr que la validation ne se produise qu'au moment de la soumission et attend l'achèvement avant de retourner une valeur pour validate(). mais c'est mon dernier recours.

Répondre

1

Je pense que vous l'avez raison de penser que vous avez à faire la validation à distance d'attendre, car il sonne comme une condition de course

Selon ajaxForm documentation vous pouvez passer dans les paramètres standard .ajax de $

Donc, ce que vous pouvez essayer est de passer async: false en ajaxForm. Cela provoquera le blocage des appels distants (synchrones).

+0

La mise en place des options ajaxForm ne fonctionne pas, car processRequest est appelé avant même que le formulaire ne soit soumis. Mais cela m'a donné l'idée d'essayer 'async: false' sur la règle distante qui peut aussi prendre les paramètres $ .ajax. Cela fonctionne mais ce n'est pas optimal, puisque chaque interaction d'interface utilisateur dans le formulaire est bloquée jusqu'à la fin de la validation, il semble être gelé. Je préférerais avoir seulement 'onsubmit: true' pour les options de validation. – mtourne