2009-12-18 4 views
0

J'ai reçu un script côté serveur que j'appelle avec la méthode jQuery ajax. Cela peut prendre un certain temps pour traiter l'ensemble de données. Après chaque ligne de données d'entrée est traitée, il imprime un "OK <row id>" à la sortie. Le type de contenu est plain/text. Ce que je veux, c'est obtenir cette sortie dans ma fonction jquery, l'analyser comme elle vient et afficher une sorte d'information de retour à l'utilisateur. Comme il peut prendre jusqu'à 20-30 minutes pour traiter toutes les données ...appel ajax avec jquery - analyse des données de retour entrantes

Comment puis-je faire en jQuery (les impressions de script serveur ceci alredy). Si j'utilise le code ci-dessous, j'obtiens la fonction success appelée après que le script termine son exécution.

$.ajax({ 
type: "POST", 
url: "script.cgi", 
data: data, 
success: function() { 
    // do something 
    alert ("OK"); 
} 
}); 
+0

IMHO le mieux que vous puissiez faire est de montrer une barre de progression. –

+0

Je voulais montrer quelles parties de l'analyse de données ont été réussies et lesquelles ne l'ont pas été ... – kender

Répondre

1

Vous ne pouvez pas accomplir ce que vous voulez avec un seul appel Ajax. Vous aurez besoin d'une interaction côté serveur (en stockant la progression dans une base de données ou dans la session), puis interrogez le serveur pour obtenir le statut.

+0

Oh, donc j'ai besoin de faire 2 requêtes - une alimentant les données, et un extrayant l'état de traitement, comme toutes les 10 secondes, pour mettre à jour le l'affichage de l'utilisateur? Je me demande pourquoi je ne peux pas traiter une réponse partielle du serveur dans l'appel ajax :( – kender

+0

Oui, c'est ce que vous devez faire.Prenez aussi en compte que la plupart des navigateurs ne peuvent pas avoir beaucoup de requêtes Ajax en attente en même temps. La requête devrait se terminer avant d'en commencer une nouvelle, donc ce n'est jamais une bonne idée d'avoir des requêtes Ajax de longue date – kgiannakakis

+0

Merci pour l'explication. :) – kender