2010-09-28 4 views
0


J'utilise le jQuery.ajax() avec certains spécifiques data. L'un d'eux est un albumid qui est généré côté serveur si l'utilisateur choisit de ne pas utiliser un de ses albums. Le problème est que si un utilisateur ajoute plusieurs photos à un nouvel album, alors, au lieu d'ajouter toutes les photos au même album, il crée plusieurs albums avec une photo dans chaque album.Modifier à la volée les données envoyées avec jquery via ajax

Ce qui travaille actuellement:

  • mise à jour d'un album (en utilisant un utilisateur a déjà)
  • créer un nouvel album
  • Renvoyez le nouvel identifiant album

J'ai essayé pour mettre à jour le champ du nom de l'album en fonction du nouvel identifiant de l'album renvoyé sur l'événement success, en pensant que dans l'appel ajax suivant, l'attribut data: ({ 'albumid': album.val())} serait alors le nouvel album i d, mais il continue d'utiliser l'ancienne valeur.

Je sais que ce problème peut être résolu en utilisant async: false, car dans ce cas, chaque appel ajax utilisera la valeur mise à jour dans le champ du nom de l'album, mais il gèle totalement le navigateur.

Avez-vous des astuces/suggestions pour ce problème?


Cheers,
Nicolas.

+0

"il crée plusieurs albums avec une photo dans chacun." S'il vous plaît expliquer 'ça'? Le logiciel serveur le fait? – Anders

+0

un logiciel serveur distant vers lequel je télécharge les images. Cheers, – Nicolas

Répondre

0

On dirait que vous avez une condition de concurrence. Sans voir le code, c'est difficile à dire, mais album.val() est probablement défini une fois quand le code est analysé et non évalué pendant le gestionnaire de succès.

Vous pouvez toujours utiliser les appels aync, mais vous devez les effectuer en série. C'est ce qu'on appelle un modèle d'objet actif. Configurez un tableau contenant les appels ajax et appelez-en un. Chacun a, dans le gestionnaire de succès, un appel pour déclencher le suivant.

+0

Je pense que vous avez parfaitement compris ma situation, mais pourriez-vous me donner un exemple? Salutations, – Nicolas

0

Vous devez utiliser la nouvelle valeur album.val() ne semble pas être réévalué avec la nouvelle valeur.

Il devrait être assez facile avec jquery pour récupérer la nouvelle valeur de l'album de $ ("# hiddenId"). Val()

Considérant que l'extrait id est stocké dans un champ caché créé de la requête ajax.

+0

Je récupère réellement la nouvelle valeur en faisant: 'album.val (msg);' sur 'succès' de l'appel ajax. Je ne vois pas ce que je peux faire de plus dans ce sens pour rafraîchir l'album.val(). De plus, je pense que toutes les images doivent être téléchargées en même temps ('async: true'), et je ne mets à jour que' album.val() 'quand le premier est demandé pour être téléchargé, les autres ne peuvent pas voir le champ mis à jour tel qu'il est réellement après l'heure à laquelle ils ont été appelés. – Nicolas

+0

Cela pourrait certainement vous aider si vous nous donnez la version de jquery que vous utilisez et le plugin que vous utilisez pour l'album, dans un instantané de votre code.Peut-être qu'il peut y avoir un "hack" à faire – rasata

+0

J'utilise jQuery 1.4.2, et si par "plugin" vous voulez dire le serveur distant, il est en fait facebook, donc rien que nous puissions faire de ce côté je suppose. Cheers, – Nicolas

Questions connexes