2010-10-19 11 views
0
for (var i=0;i<ToArray.length;i++) { 
    $.post('jquery/messages.php',{To:ToArray[i],subject:subject,msg:msg},function(data){jAlert(data);}); 
    } 

L'utilisateur peut envoyer des messages courts à un autre utilisateur. Les noms sont commaseparetad et après que j'ai divisé la chaîne je veux envoyer le même message aux différents utilisateurs avec une boucle for.Jquery pour la boucle ne s'arrête pas

En cas de problème (par exemple, il n'y a pas d'utilisateur dans la base de données), le serveur alerte l'utilisateur et arrête le processus. Si l'utilisateur a appuyé sur le bouton "OK", le processus continue. Mon problème est que la boucle ne s'arrête jamais et qu'elle n'alerte que le dernier mauvais nom.

Répondre

0

Cela peut être parce que le mode par défaut pour $ .post est d'exécuter asynchrone, et donc la boucle se poursuit jusqu'à la fin, les messages sont mis en file d'attente par le navigateur. Lorsqu'une erreur se produit finalement, la boucle est terminée et le dernier enregistrement est en place. Essayez de changer pour utiliser $ .ajax avec async défini sur false.

+0

ok cela a aidé mais seulement avec une alerte normale. avec JAlerts a le – Mstrfgsk

+0

... même problème – Mstrfgsk

0

Tout comme un premier passage, cela est très inefficace. Ne serait-il pas préférable d'emballer l'objet de réponse avec le message, l'objet et la liste des utilisateurs, et le serveur doit-il procéder au déballage? Cela réduirait la bande passante et la latence du côté client de O (n) à O (1)! Quelque chose comme:

$.post('jquery/messages.php',{To:ToArray,subject:subject,msg:msg},function(data){jAlert(data);}); 

Cela donnerait votre serveur la possibilité d'essayer d'envoyer à tous les utilisateurs, et renvoyer un message pour tous les utilisateurs pour lesquels le message a échoué, plutôt que le premier.