Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > jQuery
jQuery Forum d'entraide sur le framework jQuery. Avant de poster : Tutoriels jQuery, FAQ jQuery, Tous les tutoriels JavaScript, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/06/2011, 21h58   #1
Membre du Club
 
Inscription : août 2008
Messages : 165
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 165
Points : 50
Points : 50
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 :
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 :
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 :
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
kamclasse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 17h09   #2
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 016
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

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

Informations forums :
Inscription : mars 2002
Messages : 30 016
Points : 45 105
Points : 45 105
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
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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 21h22   #3
Membre du Club
 
Inscription : août 2008
Messages : 165
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 165
Points : 50
Points : 50
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 :
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
kamclasse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 21h46   #4
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
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.
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 22h59   #5
Membre du Club
 
Inscription : août 2008
Messages : 165
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 165
Points : 50
Points : 50
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.
kamclasse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 00h05   #6
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
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 ?
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 08h24   #7
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 016
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

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

Informations forums :
Inscription : mars 2002
Messages : 30 016
Points : 45 105
Points : 45 105
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
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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 11h48   #8
Membre du Club
 
Inscription : août 2008
Messages : 165
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 165
Points : 50
Points : 50
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
kamclasse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 14h20   #9
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 016
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

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

Informations forums :
Inscription : mars 2002
Messages : 30 016
Points : 45 105
Points : 45 105
http://php.developpez.com/faq/langag..._forcedownload
__________________
Ma page 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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 15h23   #10
Membre du Club
 
Inscription : août 2008
Messages : 165
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 165
Points : 50
Points : 50
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 :
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
kamclasse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 15h40   #11
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 016
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

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

Informations forums :
Inscription : mars 2002
Messages : 30 016
Points : 45 105
Points : 45 105
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
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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 15h57   #12
Membre du Club
 
Inscription : août 2008
Messages : 165
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 165
Points : 50
Points : 50
merci bcp je vais essayé ceci merci bcp
kamclasse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 19h33   #13
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
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 :
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.
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 09h10   #14
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 016
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

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

Informations forums :
Inscription : mars 2002
Messages : 30 016
Points : 45 105
Points : 45 105
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
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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 11h10   #15
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
@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
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 10h35   #16
Membre du Club
 
Inscription : août 2008
Messages : 165
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 165
Points : 50
Points : 50
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 :
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 :
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 :
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.
kamclasse est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h50.


 
 
 
 
Partenaires

Hébergement Web