2012-11-26 4 views
0

J'ai utilisé le plugin jQuery File Upload (https://github.com/blueimp/jQuery-File-Upload) pour télécharger plusieurs images simultanément dans des rails. La photo est attachée au modèle Item et l'élément est ajouté à un sondage.jQuery fileupload plugin succès rappel

Utilisation du plug-in comme:

$(document).ready(function(){ 
    $('#fileupload').fileupload({ 
     url: '/polls', 
     dataType: "json", 
     done: function(e,data){ 
     window.location = "/polls/" + data.result.id; 
     } 
    } 
}); 

Il était prévu d'appeler la création action dans le contrôleur de sondage pour chaque fichier photo et rediriger la page pour afficher le sondage créé après que tous les fichiers ont été téléchargés. Cependant, par exemple, lorsque 6 fichiers ont été choisis pour le téléchargement, il n'affichait que 4 photos dans la page de sondage au début. Après avoir rafraîchi la page, il affichait 6 photos. J'ai supposé que le problème était dû à la fonction de rappel. On dirait qu'il a été redirigé vers la page de sondage avant le téléchargement de tous les fichiers
. Toutes les demandes de téléchargement doivent être envoyées avec succès, mais les éléments n'ont pas tous été créés (cela peut prendre quelques secondes pour que paperclip traite les images).

Des suggestions pour moi pour résoudre ce problème? Merci

Modifier: Vérifie que la fonction de rappel "done" a bien été appelée pour chaque requête http réussie. Il n'a pas été appelé après que toutes les demandes ont été envoyées. Et l'action créer a été appelée pour chaque fichier photo. Comment puis-je avoir une fonction qui rappelle seulement après que tous les fichiers ont été téléchargés, du côté client ou côté serveur?

Répondre

1

Le rappel effectué agit comme le rappel réussi envoyé par jQuery ajax() cela ne signifie pas que le téléchargement du fichier a été terminé. Essayez d'utiliser

$('#fileupload').bind('fileuploaddone', function (e, data) {/* ... */}) 

Je ne sais pas si cela fonctionnerait mais essayez. Si ce n'est pas le cas, vous pouvez toujours écrire une méthode sur le serveur pour signaler quand le téléchargement est terminé.

+0

Essayé. Cette fois seulement 4 fichiers téléchargés lorsque 6 ont été choisis. Après l'actualisation de la page d'interrogation, encore 4. Et le serveur dit que seulement 4 demandes ont été envoyées. –

1

Vous pouvez essayer d'utiliser le rappel add pour compter les fichiers téléchargés, puis décrémenter ce numéro sur chaque rappel done. Ensuite, vous ne feriez que la redirection si ce numéro était 0.

Quelque chose comme ceci:

$(document).ready(function(){ 
    var filesToProcess = 0; 
    $('#fileupload').fileupload({ 
     url: '/polls', 
     dataType: "json", 
     add: function(e, data){ 
     filesToProcess++; 
     }, 
     done: function(e,data){ 
     filesToProcess--; 
     if (filesToProcess === 0){ 
      window.location = "/polls/" + data.result.id; 
     } 
     } 
    } 
}); 
+0

+1, 'ajouter:' ne fonctionnera pas, utilisez 'added:' à la place. – Burjua

-1

Il y a un autre rappel "stop" qui est déclenché lorsque tous les fichiers sont téléchargés. Essayez cela à la place

Questions connexes