Bonjour,

Je suis en train de développer un ensemble de pages construites de la même façon :
- appel ajax pour récupérer les colonnes d'un tableau à afficher
- affichage de la ligne d'en tête du tableau
- affichage d'une sous ligne avec un champs de recherche pour chaque colonne
- affichage des données
- affichage de la ligne footer
- affichage de la pagination et du nombre de résultat

Le problème est que l'exécution des fonctions dépend de la première instruction qui ramène les colonnes qui compose le tableau.

Alors évidemment, je pourrai faire : un appel à $.ajax et mettre l'appel à mes autres fonctions dans la partie .done, mais comme je veux factoriser mon code, j'ai créé une fonction qui fait cet appel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
	$.ajax({
		url : url_recuperation_colonnes
		type 	: 'post',
		dataType: 'json'
	})
	.done(function( retour ) {
            affichageEnTeteTable();
            affichageSousLigneChampsRecherche();
            ...
	})
Le truc c'est que je veux factoriser ce code qui est appelé dans toutes les pages. J'ai donc créé une fonction pour ce faire :

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
 
 
var ListeColonnes = '';
 
	function getHeaders(){
	    $.ajax({
		url : url_recuperation_colonnes
		type 	: 'post',
		dataType: 'json'
	    })
	    .done(function( retour ) {
                ListeColonnes = retour;
	    })
	}
 
        affichageEnTeteTable(ListeColonnes);
        affichageSousLigneChampsRecherche(ListeColonnes);
        ...
Le souci est que la fonction affichageEnTeteTable s'exécute alors que la variable ListeColonnes n'est pas initialisée.
J'ai essayé d'utiliser l'objet Callbacks de jQuery, mais cela ne fonctionne pas car la fonction getHeaders semble renvoyer un OK alors que l'appel ajax n'est pas terminée. Cela me semble normal car il est asynchrone. j'ai donc essayé de faire un appel synchrone (async : false), mais l'option est dépréciée.

Auriez-vous une idée de comment faire ?

Merci de votre aide !