IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] Appeller un script PHP via Ajax pour télécharger un gros fichier.


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut [AJAX] Appeller un script PHP via Ajax pour télécharger un gros fichier.
    Bonsoir,
    J'ai un script PHP qui permet de télécharger des fichiers à distance.
    En l'appellant directement le navigateur arrive à télécharger.

    Ce script php je l'appelle via Ajax ce qui me permet d'injecter les éventuels erreur dans un div. Malheureusement le navigateur ne telecharge pas le fichier s'il n'y a aucune erreur.

    voici le code simplifié:

    PHP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $pdf_file ="http://hebergeurdegrosfichier.com/monfichierdistant.pdf";
    ini_set('allow_url_fopen', '1');
    // on renome le fichier.
    $user_pdf_file = "pourToiInternaute.pdf";
    if(@fopen($pdf_file, "r")) {
    header("Content-Type: application/force-download\n");
    header("Content-Disposition: attachment; filename=$user_pdf_file");
    readfile($pdf_file);
    exit;
    } else echo 'Erreur';
    pour la fonction ajax j'utilise celle du tutorial avec la méthode POST (voir liste liée)

    S'il y a une erreur, il arrive bien à afficher les erreurs mais dans la fonction go(), comment Ajax gère t-il la réponse (Cf: xhr.responseText) dans le cas d'un télechargement d'un fichier?
    essaye t-il de me mettre le pdf à télécharger dans le div?

    Comment faire pour que les headers php fonctionne via ajax?
    Merci.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 130
    Par défaut
    Salut, je doute très fortement que ceci fonction avec "AJax".

    Tu devrais plutot regarder du côte d'une iframe cachée pour faire ça.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    J'ai essayé un appel synchrone...sans succès non plus...
    merci jojosbiz je vais voir du coté d'iframe...

    Mais n'hésite pas à laisser un exemple de code si tu as déjà tenté l'experience avec iframe.

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 60
    Par défaut
    Ajax te permet de recevoir dans ton javascript côté client une réponse du serveur en format text ou xml. Ce n'est donc pas étonnant que tu ne puisse pas envoyer un fichier avec ajax. Au mieux, tu ne pourras qu'obtenir le contenu de ce fichier...

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    Ajax te permet de recevoir dans ton javascript côté client une réponse du serveur en format text ou xml. Ce n'est donc pas étonnant que tu ne puisse pas envoyer un fichier avec ajax. Au mieux, tu ne pourras qu'obtenir le contenu de ce fichier...
    JE N'ENVOIE PAS UN FICHIER AVEC AJAX !!
    Ajax mais sert juste de declencheur en envoyant des paramètres à un script php sans recharger ou quitter la page mère.
    Mais c'est bien PHP qui gère le renomage et l'envoie du fichier...En cas de succès je n'envoie aucun echo (aucun text) donc je ne vois pas en quoi ça pourrait interferer avec ajax.

    Inversement, j'ai essayé un echo "<iframe src="mongrospdf.pdf"><iframe>" puisque qu'ajax attend un text mais sans succès pour un pdf mais marche avec un fichier html
    J'ai pas mal cherché mais je ne sais pas comment le header de php peut communiquer avec une iframe.
    Je vais partir d'un pb + simple: lancement d'un telechargement à partir d'une iframe.

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    En faisant du DOM, non du innerHTML ça marche déjà mieux.
    J'arrive maintenant à télécharger un fichier distant renomé à la volé dans une iframe.
    En fait en fonction de la reponse d'ajax je pourrais générer soit une iframe qui m'enverra le fichier soit un message d'erreur dans mon div prévu à cet effet ou voir même dans l'iframe.
    Restera plus qu'à essayer avec un tag object plutôt qu'une iframe.

    Le code demain (peut-être ).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/10/2016, 18h41
  2. [AJAX] Appeler une fonction d'un fichier PHP via $.ajax()
    Par informer dans le forum jQuery
    Réponses: 9
    Dernier message: 11/03/2014, 00h47
  3. Réponses: 8
    Dernier message: 19/11/2009, 15h42
  4. [AJAX] Appeler un script php apres traitement réponse Ajax
    Par lekunfry dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/10/2008, 13h34
  5. [AJAX] Appeller une page php en Ajax pour action sur Mysql
    Par Overstone dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 20/07/2007, 18h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo