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

jQuery Discussion :

Ajax Jquery: et la boite enregistrer sous


Sujet :

jQuery

  1. #1
    Membre éclairé
    Homme Profil pro
    Datascientist
    Inscrit en
    Août 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Datascientist
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 248
    Par défaut Ajax Jquery: et la boite enregistrer sous
    Bonsoir les amis,

    comme j'ai indiqué dans l'intitulé; la boite d’enregistrer sous ne se lance pas coté ajax, en fait j'ai une page PHP avec un header Excel pour lancer la boite, et une autre contenant le code ajax et un bouton pour lancer la page php:

    page PHP Header:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    <?php 
     
    $nom="Excel";
                                    
            header('Content-Type: application/vnd.ms-excel;');
            header("Content-type: application/x-msexcel");
            header('Content-Disposition: attachment; filename='.$nom.'.xls');
                                    
     
     
    ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Excel</title>
    </head>
     
    <body>
     
    <?php 
     
    echo $this->div;  ?>
    </body>
     
    </html>
    Page php de lancement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    function EnrExcel(clickThis){
     
    var content = $(clickThis).parent().find('.divExcel').html();
     
     
     $.ajax({
    	type: "POST",
    	url: basUrl+"/statistiques/enrexcel",
    	contentType: "application/vnd.ms-excel",
    	data: "basUrl="+basUrl+"&content="+content,
     
    	success: function(msg){
     
    						}
    							 });
     
     }

    j'ai essayé ce code qui marche très bien mais le prob c'est au niveau de la taille de GET je croix que le max est de 2800 caractère et dans mon cas j'ai plus que ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    function EnrExcel(clickThis){
     
    var content = $(clickThis).parent().find('.divExcel').html();
     
        var url = basUrl+"/statistiques/enrexcel?basUrl="+basUrl+"&content="+content;
        location.href = url;
     
     }

    si quelqu'un a une idée merci de m'aider, je me suis bloqué à ce niveau.

    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    enregistrer sous sur un retour d'ajax ????

    comment comptes tu faire ça ?
    Ajax retourne du string ...
    et js n'a pas accès aux boites de dialogue save as ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre éclairé
    Homme Profil pro
    Datascientist
    Inscrit en
    Août 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Datascientist
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 248
    Par défaut
    bonjour et merci bien pour votre réponse,

    en faite je n'ai pas bien compris ce que vous avez dit, mais est ce qu'on ne peux pas ouvrir une boite de save dans une page php avec un header Excel et à l'aide du ajax Jquery?
    sinon est ce qu'il n y a pas une manière de faire ceci sans utiliser ce genre de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function EnrExcel(clickThis){
     
    var content = $(clickThis).parent().find('.divExcel').html();
     
        var url = basUrl+"/statistiques/enrexcel?basUrl="+basUrl+"&content="+content;
        location.href = url;
     
     }
    par ce qu'il y a un prob de taille comme j'ai déjà dit.
    j'ai pas encore trouvé de solution et mon application au niveau d'un stage PFE bloqué à ce niveau , si quelqu'un a des propositions merciii de m'aider

    merci à vous

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 416
    Par défaut
    La question est pourquoi veux tu utiliser jquery ? Ne peux tu pas faire un chargement de fichier standard avec uniquement php ?

    Essaies de nous en dire un peu plus.

  5. #5
    Membre éclairé
    Homme Profil pro
    Datascientist
    Inscrit en
    Août 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Datascientist
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 248
    Par défaut
    bonjour et merci pour vos réponse,

    en faite j'ai des données lourd dans un tableau HTML, et pour les faire passer vers la page php je ne peut pas utiliser la méthode GET car la taille est limité en un nombre de caractères, et j'ai réussi à faire ceci mais avec un peu de données et quand je dépasse la limite le programme ce plante. j'ai pensé à utiliser je ajax pour remédier à ce prob, est ce qu'il y a d'autres méthodes pour faire ceci ?

    et merci bien.

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 416
    Par défaut
    Mais ces données dans ton tableau HTML elle viennent d'où. Tu parlais d'un format excel précédemment, tu as un fichier excel sur le serveur que tu ouvre pour remplir ce tableau HTML ?

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    si le but est d'enregistrer un fichier suite à un ajax, laisse tomber.

    Passe plutot par un forcedownlaod ( en langage serveur ) qui proposera la fenetre de téléchargement.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Membre éclairé
    Homme Profil pro
    Datascientist
    Inscrit en
    Août 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Datascientist
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 248
    Par défaut
    bonjour les amis,

    merci ABCIWEB et SpaceFrog.

    merci ABCIWEB pour vos réponses en faite j'ai des données dans une base Mysql le faite de réaliser le tableau HTML dans la page PHP qui contient le Header Excel et un peu compliqué car j'ai plusieurs type de Tableaux presque 10 types selon la demande des utilisateurs, c'est pour cela j'ai pensé à faire passer le tableau Html comme paramètre.

    merci à toi aussi SpaceFrog pour vos réponses je croix que faire un forcedownlaod c'est une bonne idée mais malheureusement je ne connait pas le concepts de réalisation de ce type de downlaod. vi tu a des proposition merci de m'aider.

    merci bien

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Membre éclairé
    Homme Profil pro
    Datascientist
    Inscrit en
    Août 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Datascientist
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 248
    Par défaut
    merci encore SpaceFrog, mais dans mon cas le fichier est généré et n'est stocké dans le serveur c'est cela j'utilise un fichier php avec le header:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    header('Content-Type: application/vnd.ms-excel;');
    				header("Content-type: application/x-msexcel");
    				header('Content-Disposition: attachment; filename='.$nom.'.xls');
    est ce que cela va être marché avec la méthode POST de Jquery

  11. #11
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    je ne pense pas.

    en effet ajax attend en retourn juste du string, à mon avis il ne réinterpète pas le header et ne detectera pas qui'l s'agit d'un force downlaod...

    La solution que j'imagine serait d'avoir un iframe caché sur ta page
    ton ajax envoie les données sur le serveur qui créée une variable de session avec ces données
    sur le retour d'ajax tu modifie le src de ton iframe pour pointer sur une page qui recupère les données en session et renvoie pour le coup ton forcedownload à l'iframe.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  12. #12
    Membre éclairé
    Homme Profil pro
    Datascientist
    Inscrit en
    Août 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Datascientist
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 248
    Par défaut
    merci bcp je vais essayé ceci merci bcp

  13. #13
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 416
    Par défaut
    Si j'ai bien compris tu as une page dans laquelle se trouve un lien qui doit permettre de télécharger un fichier csv (compatible excel) généré par une requête.

    Dans ce cas tu n'as pas besoin de passer par ajax, puisque tu n'attends pas une chaine de caractère en retour mais simplement une boite de téléchargement et cette boite de téléchargement peut être générée directement par php (tout en restant sur la page en cour).

    Le truc dans la page php est de créer un fichier temporaire, d'y enregistrer tes données récupérées avec la requête puis de proposer ce fichier en téléchargement.

    Un truc dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    $date = date("y-m-d-H-i-s");//pour dater le fichier
     
    $fichier_de_sauvegarde = 'mon_fichier-'.$date.'.csv'; //nom du fichier proposé en téléchargement
     
    $connexion_bdd = ... // connexion à la base
     
    $query = "SELECT ... FROM table WHERE ...";
     
    $result = mysqli_query($connexion_bdd,$query,MYSQLI_USE_RESULT);
     
    $handle = tmpfile();// Création du fichier temporaire
    $info = stream_get_meta_data($handle);// servira pour avoir la taille du fichier
     
    if($result && $handle)
     
       {
        $colonnes = array('Colonne1','Colonne2','Colonne3');// pour créer ta première ligne correspondant aux entêtes de colonne (ici trois colonnes)
        fputcsv($handle, $colonnes, ';');
     
        while ($line = mysqli_fetch_row($result)) fputcsv($handle, $line, ';');
     
     
        mysqli_free_result($result);
       }	 
     
        $filesize = filesize($info['uri']);
     
     
    	header("Content-Type: application/force-download; name=\"".$fichier_de_sauvegarde."\"");
     
    	header("Content-Transfer-Encoding: text/csv");
    	header("Content-Length: ".$filesize);
    	header("Content-Disposition: attachment; filename=\"".$fichier_de_sauvegarde."\"");
    	header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public");
    	header("Pragma: no-cache"); 
    	header("Expires: 0"); 
     
    	rewind($handle);
    	fpassthru($handle);
    	fclose($handle);
    	exit;
    Donc voilà il suffit que ton bouton ou ton lien pointe vers ce fichier php pour proposer un fichier CSV en téléchargement. Tu peux passer dans l'URL du lien une variable qui servira dans la clause WHERE de ta requête.

    Si ton hébergeur a désactivé tmpfile() tu peux essayer la classe SplTempFileObject pour faire la même chose.

  14. #14
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    je pense que la question était "comment le faire avec ajax" ??

    mais je me demande même si on ne paut pas avec ajax se passer de l'iframe caché en faisant simplement lors du retour ajax un self.location.href ??
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  15. #15
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 416
    Par défaut
    @spacefrog J'ai cru comprendre qu'il avait penser à ajax parce qu'il ne savait pas trop comment faire...

    S'il veut faire télécharger un fichier au format CSV à partir d'une requête, une solution est dans mon post précédent.
    Il suffit d'un lien href basique vers ce fichier php avec éventuellement une variable pour préciser le critère de la recherche de la requête et le tour est joué. Pour une fois que php peut proposer un contenu supplémentaire (ici un fichier en téléchargement) sans changer ou recharger de page... faut pas s'en priver et je ne vois pas ce qu'ajax pourrait apporter dans ce cas là (sauf à se compliquer la vie).

    Enfin bon, j'ai peut-être mal compris ses besoins, on verra bien

  16. #16
    Membre éclairé
    Homme Profil pro
    Datascientist
    Inscrit en
    Août 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Datascientist
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 248
    Par défaut
    bonjour et merci à vous ABCIWEB SpaceFrog pour vos réponse.
    en faite j'ai combiné vos réponse et enfin j'ai trouvé une solution qui marche très bien, je vais expliqué pour le gens qui ont le même prob:

    dans la page Ajax: un envoie du tableau HTML dans la variable (content) suivie par location.href en success
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    function EnrExcel(clickThis){
     
    var content = $(clickThis).parent().find('.divExcel').html();
     
     $.ajax({
    		type: "POST",
    		url: basUrl+"/statistiques/enrexcel",
     
    		data: "basUrl="+basUrl+"&content="+content,
     
    		success: function(msg){
     
    		var url = basUrl+"/statistiques/enrexcel?basUrl="+basUrl;
        	location.href = url;
    						}
    							 });
     
     }
    la page PHP :
    le 1er envoie par ajax en récupère le tableau HTML suivie par un stockage dans la session.

    le 2eme envoie par location.href récupération de la variable de session et faire le header Excel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Zend_Session::start(); 
    $session = new Zend_Session_Namespace('Gestion_Action_Amelioration'); 
     
        if(!isset($session->content)) 
        	{ 
     
           	$session->content = utf8_decode($parametres['content']); 
    		$this->view->div = "";
        	}
     
    	else {
    		$this->view->div = $session->content;
    		unset($session->content);
    		}
    la page Heder Excel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php 
     
    $nom="Excel";
                                    
            header('Content-Type: application/vnd.ms-excel;');
            header("Content-type: application/x-msexcel");
            header('Content-Disposition: attachment; filename='.$nom.'.xls');
    ?>
    <?php 
     
    echo $this->div;  ?>
    merci à vous les amis et à la prochaine.

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

Discussions similaires

  1. [C#] Boîte de dialogue "Enregistrer sous"
    Par TmDsbsBs dans le forum ASP.NET
    Réponses: 22
    Dernier message: 31/10/2013, 17h55
  2. Problème avec boite Enregistrer Sous
    Par bruno28 dans le forum VBA Access
    Réponses: 0
    Dernier message: 12/09/2007, 13h11
  3. [VBA] Renseignements sur boite de dialogue "enregistrer sous"
    Par p'tite Sandrine dans le forum Access
    Réponses: 40
    Dernier message: 22/02/2007, 10h53
  4. boite de dialogue enregistrer sous
    Par maxeur dans le forum Access
    Réponses: 8
    Dernier message: 23/01/2007, 16h23
  5. Pb Boite de dialogue "enregistrer sous"
    Par tangueros dans le forum Access
    Réponses: 2
    Dernier message: 31/07/2006, 11h25

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