6
votes

Wicket: Demandes Ajax simultanées limitées à une?

Situation

Dans mon application de guichet, j'ai une page qui contient deux tags. Chaque fois qu'un onglet est sélectionné, son contenu est récupéré via Ajax afin que chaque fois que vous passez à un onglet différent, son contenu est chargé de nouveau sur le serveur.

sur l'un des onglets, j'ai un champ de saisie qui a un événement surblur qui enregistre le contenu du champ via Ajax.

problème

Si l'accent est mis sur le champ Entrée et que je clique sur une zone vide de la page, la requête Ajax doit être tirée et les données enregistrées.

Si, au lieu de cliquer sur une zone vide de la page, je clique sur l'autre onglet, la demande Ajax pour enregistrer le champ de saisie est tirée mais non la requête Ajax pour changer d'onglets.

est le nombre de demandes AJAX simultanées limitées dans le guichet à un?


0 commentaires

3 Réponses :


0
votes

peut être la réponse de la demande d'Ajax Onblur peut avoir une erreur ou le processus que vous effectuez une fois que la réponse AJAX peut avoir une erreur.

Si possible, pouvez-vous coller la sniplet de code.


1 commentaires

Merci pour votre réponse - ni les demandes lorsqu'elles sont exécutées produisent individuellement une erreur. Je lis actuellement Wicket-Ajax.js et il semble y avoir une sorte de faire de la queue là-bas ...



10
votes

Oui, les demandes simultanées à une instance de page sont limitées à une. Wicket Ajax fera la queue Demandes AJAX ultérieures dans le canal latéral du client. Consultez le débogueur de Wicket Ajax pour plus de détails dans votre application en cours d'exécution.

Ceci est fait pour faciliter la construction de votre application: aucune nécessité de contourner les problèmes de concurrence sur le serveur. L'accès à la page est toujours un à partir d'un seul thread: le fil de demande actif actuel. Si nous ne l'avons pas fait, nous devrions nous synchroniser sur l'arborescence des composants et rendre l'ensemble du modèle de programmation Go Yuk.


2 commentaires

Merci - cela a du sens, mais cela n'explique pas pourquoi la demande de modification de l'onglet n'est pas tirée. La taille de la file d'attente est-elle limitée à 1? J'ai vérifié le nom de la chaîne et utilisez les deux "0 | S".


En plus, bien que le fait de le faire sur un niveau de cadre serait très douloureux, dans certains cas limités, vous pouvez rouler vos propres composants auto-mis à jour qui fonctionnent en parallèle avec relativement peu de fiches.



4
votes

Le problème était notre ajaxindicator qui recouvre une DIV sur toute la page pendant la durée de chaque demande AJAX. Les événements "MouseUp" (et par conséquent "Cliquez sur") sont arrivés lorsque la superposition était en place et donc perdue. En maintenant le bouton de la souris enfoncé et en le relâchant après que la première demande Ajax avait terminé et superposée divisée enlevé, la deuxième demande AJAX a été tirée.

Il semble évident maintenant comme toute la raison pour laquelle nous avons une telle superposition consiste à empêcher les utilisateurs de cliquer sur pendant que une demande Ajax est en cours d'exécution.

Je pense que ma solution consistera à désactiver l'indicateur Ajax sur certaines demandes très rapides, telles que celles-ci, où cela n'a aucun sens d'avoir un indicateur (ignorant le potentiel que les demandes pourraient prendre beaucoup plus de temps en cas de charge de serveur inhabituellement élevée) .


0 commentaires