2010-04-15 24 views
0

Je veux montrer quelques informations de progression d'une procédure côté serveur (qui est en fait un ré-encodage ffmpeg). La meilleure façon dont je pensais à utiliser deux appels $ .ajax() différents sur myscript comme ceci:

1) lorsque le formulaire est soumis (ce qui déclencherait le ré-encodage) un $ .ajax() démarrer le réencodage comme ceci:

$.ajax({ 
    type: "GET", 
    url: "runffmpeg.php", 
    data: dataString, 
    success: function(data, textStatus, XMLHttpRequest) { 
      //clearInterval(repeat); 
      location.reload(); 
     }}); 

2) Ensuite, un second appel .ajax de $() commencerait à regarder la taille du fichier donné afin d'informer le visiteur des progrès, comme celui-ci:

$.ajax({ 
     type: "GET", 
     url: "checkprogress.php", 
     data: dataString, 
     success: function(data, textStatus, XMLHttpRequest) {     
       $('#submitted').html(data); 
      } 
    }); 

En fait, cet appel devrait être fait dans un setInterval de 1 s période écoulée afin de montrer la progression.

Bien sûr, cela ne fonctionne pas (ou sinon pourquoi devrais-je posté) et je ne trouve aucune référence d'avoir 2 appels ajax en même temps.

+0

Vous avez des erreurs? Qu'est-ce qui ne fonctionne pas exactement? – marcgg

Répondre

2

Il est parfaitement acceptable d'avoir deux appels ajax en même temps. Je voudrais cependant pas utiliser setInterval, car vous pourriez vous retrouver avec plusieurs appels à checkprogress.php si cela prend plus d'une seconde pour retourner. Vous feriez mieux d'avoir la méthode de succès lancer une nouvelle requête ajax, peut-être après un délai, par exemple:

function checkProg(){ 
    $.ajax({ 
     type: "GET", 
     url: "checkprogress.php", 
     data: dataString, 
     success: function(data, textStatus, XMLHttpRequest) {     
       $('#submitted').html(data); 
       if (/* not yet complete */) { 
       setTimeout(checkProg,500); 
       } 
      } 
    }); 
} 
0

Il y a une limite sur le nombre de requêtes ajax qui peuvent être actives en même temps. Cela dépend du navigateur et devrait être quelque chose près de 3. Je crois qu'il est possible d'avoir deux demandes actives en même temps, mais ce n'est pas recommandé.

Ce que je propose est de re-concevoir votre code serveur pour répondre immédiatement à la soumission du formulaire, en accusant réception de la commande. Ensuite, utilisez l'interrogation pour afficher la progression.