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] Modifier les header (PHP) avec une requête XMLHttpRequest?


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Points : 184
    Points
    184
    Par défaut [AJAX] Modifier les header (PHP) avec une requête XMLHttpRequest?
    Bonjour

    J'aimerais exécuter le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"$filename.csv\"");
    echo $data;
    (ou $data contient des données)

    à partir d'un HTTP_Request ajax...c'est possible?

    Je suis incapable de le faire fonctionner, la fonction fait juste rien.

    Merci

  2. #2
    Membre expérimenté
    Avatar de ryan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2003
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 956
    Points : 1 316
    Points
    1 316
    Billets dans le blog
    1
    Par défaut
    Yop!


    J'ai l'impression qu'il y a une erreur de syntaxe dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header("Content-Disposition: attachment; filename=\"$filename.csv\"");
    Tu ne dois pas nécessairement ajouter de guillemets autours du nom du fichier, donc tu devrais pouvoir faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header("Content-Disposition: attachment; filename=".$filename.".csv");
    De plus, il faut veiller à ce que rien ne soit affiché avant de faire appel à la fonction header.
    Un ascenseur est une machine qui passe quand même la moitié de son temps à descendre.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Points : 184
    Points
    184
    Par défaut
    Ah ça doit être ça...car tel quel, ça fonctionne dans une page à part.

    Y'a t-il un autre moyen?

  4. #4
    Membre expérimenté
    Avatar de ryan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2003
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 956
    Points : 1 316
    Points
    1 316
    Billets dans le blog
    1
    Par défaut
    Yop!

    Citation Envoyé par Prosis Voir le message
    Y'a t-il un autre moyen?

    Non, si tu affiches quoi que ce soit, un header est envoyé au client. Et une fois que ce header est parti, il n'y a plus moyen d'en envoyer un autre sans une nouvelle requête du client.
    Un ascenseur est une machine qui passe quand même la moitié de son temps à descendre.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Points : 184
    Points
    184
    Par défaut
    Bon alors je vais essayer de trouver un autre moyen...c'est que je ne voulais pas avoir un fichier physique sur le serveur pour le temps d'un téléchargement.

    Merci

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Tu peux écrire ton fichier dans php://memory sa ouvre un espace logique dans la mémoire pour y écrire comme dans un fichier.

    Après le problème de ta requête AJAX pour faire télécharger un fichier ce qu'il n'est pas dit que le navigateur vas savoir proposer à l'utilisateur d'enregistrer le fichier, CAR au départ c'est une requête réaliser avec xmlhttprequest en JS.

    Le plus simple amha, c'est que tu modifies le target de ton lien, ou formulaire, vers une iframe caché. Sans utiliser d'AJAX, juste du JS.
    Comme cela tu fais une requête classique, et tous les bons trucs de d'habitudes fonctionneront comme avant.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Points : 184
    Points
    184
    Par défaut
    Comment est-ce qu'on utilise php://memory?

    En fait, je veux que le fichier se créé lorsque l'utilisateur clique sur un lien et qu'il s'offre à télécharger aussitôt.

    J'aime pas trop la solution iframe mais j'ai l'impression que ce sera la seule option hein?

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    BAh c'est peut être pas la seule solution. Y'en a peut être d'autres. Mais c'est une que, moi, j'utiliserais. Et qui me satisferais pleinement. D'un point de vu technique c'est très propre, et ce n'est pas plus difficile que cela.

    Pour ce qui est de mon commentaire sur php. Il s'agit d'un wrapper. en fait c'est un peu de magie. Tu fais $fp = fopen("php://memory"); et tu obtiens un pointeur sur un fichier logique en lecture/écriture. quand tu le fermes la mémoire se libère.
    simple.
    Tu t'en sers lorsque tu souhaites créer des petits fichiers à la volée. Enfin la pour taille, sa dépend essentiellement de l'hébergement ; )
    http://www.php.net/manual/fr/wrappers.php.php

Discussions similaires

  1. Réponses: 8
    Dernier message: 01/04/2011, 08h15
  2. Utiliser les données importées avec une requête
    Par Shinyshine dans le forum C#
    Réponses: 20
    Dernier message: 18/05/2010, 14h48
  3. [AC-2003] Modifier les tuples résultat d'une requête
    Par -ULK- dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 01/07/2009, 14h20
  4. [RegEx] Preg_replace avec une requête entre les remplacements
    Par sox83 dans le forum Langage
    Réponses: 6
    Dernier message: 16/12/2005, 18h12
  5. Modifier un champs texte avec une fonction PHP (calcul TVA)
    Par Stella2809 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/11/2005, 00h55

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