2016-08-26 6 views
0

je, ce que je crois être une jolie fonction normale et saine d'esprit javascript, ci-dessous:Javascript blocage sur demande post

$scope.pickFile = function() { 
    filepicker.setKey("..."); 
    filepicker.pick(
     {}, 
     function(Blob) { // OnSuccess 
      var uuid = Blob.url.split('/').slice(-1)[0]; 
      window.location.replace("/url" + uuid); 
      $.post(
       "/other_url" + uuid, 
       {'input': $('#rawText')[0].checked? "text" : "features"} 
      ); 
    }); 
} 

Maintenant, la chose bizarre est que la redirection ne se produit pas jusqu'à ce que la demande de poste finit. Mon instinct dit que cela pourrait être un peu de magie dans les coulisses avec le fichier, mais je n'ai aucune idée de ce que cela pourrait être, et il ne semble y avoir aucune documentation à ce sujet.

Il ne semble pas que ce soit une simple synchronisation, puisque la redirection est en fait la première, mais qu'elle bloque à la fin de la demande de publication.

+0

la 'post' pourrait avoir besoin se produire avant la redirection avec le' window.location' peut-être? (Ou la redirection dans le rappel?) –

+0

@MarkSchultheiss Excuses, je ne suis pas tout à fait. Cela doit se produire après l'envoi de la requête POST, mais pas après la réponse, ce qui se passe. –

+0

Je suppose qu'une autre façon de reformuler est de chercher quelque chose comme 'window.onbeforeunload = function (e) { poster ici; }; ' –

Répondre

1

Essayez de changer le poste d'inclure explicitement pas le gestionnaire de rappel: un coup d'oeil rapide

var mypost = $.ajax({ 
    type: "POST", 
    url: "/other_url" + uuid, 
    data: {'input': $('#rawText')[0].checked? "text" : "features"} 
}); 
return false;