47 votes

Récupération du code de statut HTTP de l'iframe chargée avec Javascript

J'ai utilisé le plugin jQuery Form pour la soumission asynchrone de formulaires. Pour les formulaires contenant des fichiers, il copie le formulaire dans un iframe caché, le soumet, puis copie à nouveau le contenu de l'iframe. Le problème est que je n'arrive pas à savoir quel code d'état HTTP a été renvoyé par le serveur. Par exemple, si le serveur renvoie 404, les données de l'iframe seront copiées normalement et traitées comme une réponse normale.

J'ai essayé de fouiller dans les objets de l'iframe à la recherche d'un attribut status_code, mais je n'ai rien trouvé de tel.


La fonction $.ajax() ne peut pas être utilisée, car elle ne prend pas en charge l'envoi de fichiers. La seule façon que je connaisse pour envoyer des fichiers de manière asynchrone est d'utiliser la méthode de l'iframe caché.

19voto

Coyod Points 582

Vous ne pouvez pas obtenir les en-têtes de page avec JS, mais vous pouvez distinguer les erreurs des succès : Essayez quelque chose comme ceci :

    var uploadStarted = false;
    function OnUploadStart(){            
        uploadStarted = true;
    }

    function OnUploadComplete(state,message){       

       if(state == 1)
        alert("Success: "+message);     
       else
         if(state == 0 && uploadStarted)
            alert("Erreur : "+( message ? message : "inconnu" ));
    }   

Côté serveur:

/*
  file: upload.php
*/
';
  if(success)
     print 'window.parent.OnUploadComplete(1,"Fichier téléchargé!");';
  else
     print 'window.parent.OnUploadComplete(0, "Fichier trop volumineux!");';
  print  '';
?>

1voto

Moa'ath Points 20

D'accord, en gros, vous pouvez faire l'une des choses suivantes :

1- Utiliser cette bibliothèque :

http://www.phpletter.com/Demo/AjaxFileUpload-Demo/

J'ai essayé et ça fonctionne bien pour moi, j'envoie des fichiers de manière asynchrone et je l'utilise largement.

2- Veuillez consulter ce message :

appeler une fonction JavaScript depuis l'extérieur d'une iframe

cela vous donnera les informations nécessaires pour résoudre votre problème.

-4voto

choi gray Points 1

Vous ne pouvez pas récupérer le code de statut HTTP chargé dans un "iframe" directement. Mais lorsque qu'une erreur http se produit, le serveur ne renverra rien à l'"iframe". Ainsi, l'iframe n'a aucun contenu. Vous pouvez vérifier le contenu du corps de l'iframe, lorsque le corps de l'iframe est vide, utilisez ajax avec la même URL pour obtenir la réponse du serveur. Ensuite, vous pourrez récupérer le code de statut http à partir de la réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X