Bonjour à tous,
Je rencontre un problème lié à ajax et php.
En effet, je travaille sur un portail permettant de gérer des rapports d'anomalies. Celui-ci permet notamment d'exporter un ou plusieurs de ces rapports au format word, excel et pdf.
Mon problème ne concerne que l'export au format word.
Cette page d'export est un formulaire permettant de sélectionner les différents critères permettant de générer une liste de rapports à exporter.
Lorsque la selection est effectuée, l'utilisateur clique sur le bouton d'export.
Pour le cas du bouton d'export word, lorsque l'utilisateur clique, une progress bar se lance (grâce à ajax) permettant au php d'exporter les données au format xml puis grâce à la fonction exec() php d'appeler un script VisualBasic pour convertir le tout au format Word. Une fois ces étapes terminées la progress bar se ferme et un lien de téléchargement vient s'afficher sous le bouton d'export (toujours grâce à ajax).
Mon problème est que lorsque le nombre de rapport est élevé (supérieur à 200) et que je fais ma requête ajax en mode asynchrone, la progress bar se charge à l'infini et le lien de download n'est jamais affiché.
Pourtant le fichier word à bien été généré.
Pire apache doit être redémarré la plupart du temps comme s'il se retrouvait dans une boucle infini.
Le message dans les logs apache :
[Mon Jul 09 11:55:09 2012] [warn] Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting
Ce bug ne se produit pas lorsque je passe le mode async à false mais il me fait perdre tout l'intérêt de la progress bar puisque celle ci ne se charge plus dynamiquement.
A noter aussi que le principe de l'export excel est le même mais qu'il ne pose aucun problème...
Est ce que quelqu'un à déjà eu des problèmes de se genre et comment les a t-il résolu?
Merci d'avance à tous ceux qui voudront bien m'aider
Je rajoute le code de la fonction qui pose problème avec la correction temporaire que j'ai apportée à savoir le passage en mode synchrone et la désactivation de la progress bar lorsque l'on exporte au format word
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 function startLoad(loadTime) { // Ferme le boite de dialogue de confirmation $('#myConfirmWindow').dialog('close'); // Lance le chargement de la progress bar if ($('#action').val() == 'export') { // Ouvre la popup de la progress bar modaleWindow ('myProgressWindow','',RES_SAGA['M_CCB_LOAD_PROGRESS'],''); $('#myProgressWindow').css('height','70px'); $('#myProgressWindow').progressbar({value : 0}); loadProgressBar(loadTime * 2); async = true; } else if($('#action').val() == 'exportWord') { alert('Progress Bar désactivée') async = false; } else { // Ouvre la popup de la progress bar modaleWindow ('myProgressWindow','',RES_SAGA['M_CCB_LOAD_PROGRESS'],''); $('#myProgressWindow').css('height','70px'); $('#myProgressWindow').progressbar({value : 0}); loadProgressBar(loadTime * 5); async = true; } // Envoi du formulaire // document.forms.ccbExportForm.submit(); type = getMandatoryBox('type[]'); criticite = getMandatoryBox('criticite[]'); etat = getMandatoryBox('etat[]'); tranche = getMandatoryBox('tranche[]'); copres = getMandatoryBox('copres[]'); system = getMandatoryBox('system[]'); subsystem = getMandatoryBox('subsystem[]'); $('#td' + $('#action').val()).html('<br /><b style="font-size: 200%">Loading...</b>'); $.ajax({ type: "POST", url: "ccbExportForm.php", dataType: 'text', data: "action=" + $('#action').val() + "&type=" + JSON.stringify(type) + "&criticite=" + JSON.stringify(criticite) + "&etat=" + JSON.stringify(etat) + "&tranche=" + JSON.stringify(tranche) + "&system=" + JSON.stringify(system) + "&subsystem=" + JSON.stringify(subsystem) + "&copres=" + JSON.stringify(copres) + "&groupby=" + $('#groupby').val() + "&ccbnumber=" + $('#ccbnumber').val() + "&ccbdate=" + $('#ccbdate').val(), async: async, success: function(msg) { $('#myProgressWindow').dialog('close'); $('#td' + $('#action').val()).html(msg); $('#action').val('export'); } }); }
Partager