Quel est le meilleur moyen de traiter les requêtes Ajax hors séquence (de préférence en utilisant un jQuery)? Par exemple, une requête Ajax est envoyée depuis le navigateur de l'utilisateur chaque fois qu'un champ change. Un utilisateur peut changer dog_name
en "Fluffy", mais un instant plus tard, elle le change en "Spot". La première demande est retardée pour une raison quelconque, donc elle arrive au serveur après la seconde, et son chien finit par être appelé "Fluffy" au lieu de "Spot".Comment gérer les requêtes Ajax hors séquence?
Je pourrais transmettre un horodatage côté client avec chaque requête et demander au serveur de le suivre dans le cadre de chaque enregistrement Dog
et ignorer les demandes précédentes pour changer le même champ (mais seulement s'il y a une différence de moins de 5 minutes, au cas où l'utilisateur changerait l'heure sur sa machine).
Cette approche est-elle suffisamment robuste ou existe-t-il une meilleure approche plus standardisée?
EDIT:
Matt a fait un excellent point dans son commentaire. Il est préférable de sérialiser les demandes de modification du même champ. Existe-t-il une manière standard d'implémenter les files d'attente de requêtes Ajax?
EDIT # 2
En réponse au commentaire de @ cherouvim, je ne pense pas que je devrais verrouiller la forme. Le champ change pour refléter le changement de l'utilisateur, une demande de changement est placée dans la file d'attente. Si une demande de modification du même champ attend dans la file d'attente, supprimez cette ancienne requête. 2 choses que je devrais encore aborder:
Placer une requête dans la file d'attente est une tâche asynchrone. Je pourrais avoir le gestionnaire de rappel de la demande précédente Ajax envoyer la prochaine demande dans la file d'attente. Le code Javascript n'est pas multithread (ou ... est-il?)
Si une requête échoue, j'aurais besoin de l'interface utilisateur pour refléter l'état de la dernière requête réussie. Ainsi, si l'utilisateur change le nom du chien en "Spot" et que la requête Ajax échoue, le champ devra être redéfini sur "Fluffy" (la dernière valeur validée).
De quoi ai-je besoin?
Plus simple: ne pas autoriser plusieurs demandes simultanées pour le même champ. Mettez-les en file d'attente si les changements se produisent rapidement. –
@Matt Ball: et comment "verrouiller" toute la conversation display-form-push-changes du client? Ce n'est pas un seul cycle de demande/réponse, mais deux. – cherouvim