2011-02-22 6 views
3

Je soumets à distance un formulaire potentiellement plusieurs fois de suite. Dans ce cas particulier, le débouncing n'est pas une option. Je cherche l'équivalent jQuery de .abort() pour les formulaires à distance soumis en utilisant .submit() afin que je puisse annuler toutes les soumissions précédentes quand une nouvelle est faite.Tuer jquery ajax formulaire soumettre

Merci à l'avance, Garrett

Répondre

1

Peut-être que vous pouvez utiliser jQuery à la file d'attente et vos .clearQueue() pour soumet effacer la file d'attente en cas de besoin. Juste une idée ...

0

Je ne comprends pas votre problème. Si le formulaire est soumis, une requête est envoyée au serveur ... alors, comment pouvez-vous annuler cela?

Si vous annulez le traitement de la réponse, il suffit d'utiliser une variable de contrôle que vous augmentez/diminuez pour savoir s'il y a des demandes en attente. De l'API: http://api.jquery.com/category/ajax/ vous ne pouvez pas faire cela.

+0

Oui, je souhaite annuler le traitement de la réponse. Le problème est que le serveur ne renvoie pas nécessairement les réponses dans l'ordre où les demandes sont reçues, donc un simple compteur de requêtes ne me laisse pas déterminer quelle réponse est la plus récente (à moins que je sois bête et ne voie pas quelque chose). Je pourrais inclure le compteur dans la demande et le renvoyer dans la réponse, mais je voudrais éviter l'implication côté serveur si possible. –

2

Ce que je l'ai fait est joindre à l'événement beforeSend de la forme, stocker l'objet XHR dans le cadre des données du formulaire, et interrompra si une nouvelle demande est en file d'attente:

$('form').bind("ajax:beforeSend", function(evt, xhr) { 
    console.log('Enqueued new xhr request'); 
    var prevXhr = $(this).data('current-xhr'); 
    if (prevXhr) { 
    prevXhr.abort(); 
    console.log('Aborting previous xhr request'); 
    } 
    $(this).data('current-xhr', xhr); 
}); 

Et vous pouvez toujours utiliser l'option :remote => true dans la forme simple.