11402 sujets

JavaScript, DOM et API Web HTML5

Pages :
Salut !

Alors voila, sachez que je suis pas bon en programmation web hein ^^ j'ai pas mal de difficulté et surtout avec l'ajax, mais bon.

Je voudrais récupérer des valeurs que je vais chercher en ajax pour les mettre dans un graph, avec ca:

function certif_level (certiflevel) {			
var url;
var value;				
url="type_data=Certification_Level&type_areaOUcountry=Learner_Country&nom_data=" + certiflevel + "&year=" + selected_year + "&month=all&areaOUcountry=" + save_country;
value = ajax_call(url);
return value;	
}		


comme vous pouvez le voir j'utilise la fonction ajax_call, qui est la suivante:

function ajax_call(what2do){
$.ajax({
	type: "GET",
	dataType: "json",
	url: "data.php?" + what2do,
	success: function(json) {
		var nom = json['nom'];
		nom = nom.replace(" ","_");
		if (nom == "classroom" || nom == "elearning"){
			$('#id' + nom + 'data').html(json['duration']+ " days");
		}
		else {
			$('#id' + nom + 'data').html(json['ladata']);
			return json['ladata'];
		}
	}
});	
};


et donc je voudrais retourner la valeur avec le return json['ladata'] et ca ne marche pas, mais je crois que c'est parce que c'est dans la partie "success", donc j'ai essayé de le mettre en dessous mais a ce moment la il reconnait plus json['ladata'], donc .........

Comment faire pour récupérer les valeurs directement svp ?

Pour info ensuite ca s incruste dans le graph comme ca:

series: [{
	type: 'pie',
	name: 'Certification',
	data: [
		['ACFE',certif_level ('acfe')],
		['ACPS',certif_level ('acps')],
		['ACPSi',certif_level ('acpsi')],
		['ACSE',certif_level ('acse')],
		['ACSEi',certif_level ('acsei')],
		['ACSR',certif_level ('acsr')],
		['AQPS', certif_level ('aqps')]
	]
}]



en espérant que vous pourrez m'aider =)
Ça ne fonctionne pas car une requête Ajax est non-bloquante et que comme cette dernière met un certain temps à s'exécuter, le return de ta fonction est appelé avant que la requête n'ai retournée à un résultat.

La solution est de gérer la situation avec ce que l'on appel un "callback". C'est à dire une fonction passée en paramètre à ajax_call() et qui sera exécutée dans le "success" de la requête Ajax (voir fonction call() et apply() de JavaScript). C'est cette fonction callback qui procèdera à la manipulation des données.

En gros pour faire simple, tu ne peux pas faire de return dans un appel Ajax.
moust a écrit :
En gros pour faire simple, tu ne peux pas faire de return dans un appel Ajax.


Pas sûr, pas sûr du tout même.

Il est certain que si la requêtes s'exécute en asynchrone, le return est impossible, mais autrement un return Ajax doit être faisable (même s'il n'a que très peu d'utilité, on est bien d'accord).
heuuuuu j ai pas tout saisi XD mais bon ok je vais essayer de chercher ce qu est un callback ...
Naemesis a écrit :


Pas sûr, pas sûr du tout même.

Il est certain que si la requêtes s'exécute en asynchrone, le return est impossible, mais autrement un return Ajax doit être faisable (même s'il n'a que très peu d'utilité, on est bien d'accord).


AJAX = Asynchronous Javascript and XML


@InfoGeo
Un exemple simplifié :
function ajax_call(what2do, callback) {
	$.ajax({
		type: "GET",
		dataType: "json",
		url: "data.php?" + what2do,
		success: function(json) {
			callback.call(this, json);
		}
	});
}

ajax_call(url, function(json){
	$("body").html(json);
});
Oui, merci, jusque là, je suivais a peu près l'Ajax, mais il y a moyen de le rendre synchrone, et donc de se servir du return.
function ajax_call(what2do, callback) {
	$.ajax({
		type: "GET",
		dataType: "json",
		url: "data.php?" + what2do,
		success: function(json) {
			//traitement de ce que renvoie la fonction
		}
	});
}
je pense que ca:
ajax_call(url, function(json){
	$("body").html(json);
});

c'est pas vraiment ce que je veux, enfin ici ma valeur sera contenu dans le "json" ?

si je fais dans ma fonction:

function certif_level (certiflevel) {			
var url;
var value;				
url="type_data=Certification_Level&type_areaOUcountry=Learner_Country&nom_data=" + certiflevel + "&year=" + selected_year + "&month=all&areaOUcountry=" + save_country;
value = ajax_call(url, function(json))
return value;	
}		


ca marche pas quoi, enfin je comprend pas comment d apres ma fonction changer le ajax pour que ca marche quoi ....
Smiley bawling

j'essaye de faire un truc du genre:

function certif_level (certiflevel) {			
var url;							
url= "type_data=Certification_Level&type_areaOUcountry=Learner_Country&nom_data=" + certiflevel + "&year=" + selected_year + "&month=all&areaOUcountry=" + save_country;
ajax_call (url, function(json){
       value=json
       alert(json);
});				 
return value;	
}	


sauf que en fait json c un object apparemment ..... enfin je comprend pas tout la .... parce que certe tu m as dit que je pouvais l'envoyer en html avec
$("body").html(json);
mais moi c'est pas ce que je veux je veux juste envoyer la valeur dans une autre fonction en javascript, en fait je voudrais ici la retourner quoi depuis cette fonction .... sauf que je vois pas comment faire pour avoir cette valeur en soit ....

Si qqun pourrai m'aider ca serait sympa, pense qu'il y a pas énormément de modif à faier mais je sais pas lesquelles faire XD
comme je le dis au début, je veux le mettre pour un graph (un camembert ...)

et donc les données sont récupérées la:

series: [{
						type: 'pie',
						name: 'Certification',
						data: [
							['ACFE',certif_level ('acfe')],
							['ACPS',certif_level ('acps')],
							['ACPSi',certif_level ('acpsi')],
							['ACSE',certif_level ('acse')],
							['ACSEi',certif_level ('acsei')],
							['ACSR',certif_level ('acsr')],
							['AQPS', certif_level ('aqps')]
						]
					}]


(petite partie du code pour le graphe)


Voila pourquoi je voudrais le renvoyer en return direct ..... sauf que je vois aps comment récupérer la valeur en soit et non un objet
voila tout le code pour le graph:

var chart;
			$(document).ready(function() {
				chart = new Highcharts.Chart({
					chart: {
						renderTo: 'pie_certification',
						plotBackgroundColor: null,
						plotBorderWidth: null,
						plotShadow: false
					},
					title: {
						text: 'Type of Certification Level',
					},
					subtitle: {
						text: '2011',
					},
					tooltip: {
						formatter: function() {
							return '<b>'+ this.point.name +'</b>: '+ this.y;
						}
					},
					plotOptions: {
						pie: {
							allowPointSelect: true,
							cursor: 'pointer',
							dataLabels: {
								enabled: false
							},
							showInLegend: true
						}
					},
				    series: [{
						type: 'pie',
						name: 'Certification',
						data: [
							['ACFE',certif_level ('acfe')],
							['ACPS',certif_level ('acps')],
							['ACPSi',certif_level ('acpsi')],
							['ACSE',certif_level ('acse')],
							['ACSEi',certif_level ('acsei')],
							['ACSR',certif_level ('acsr')],
							['AQPS', certif_level ('aqps')]
						]
					}]
				});
			});


et en effet je crois bien qu'il y a du json ou jquery, en fait c'est avec le site hightchart: (je suis vraiment un noob XD)

http://www.highcharts.com/
en fait je me rend compte que le return c'est pas la meilleur idée parce que en fait mon site affiche des valeurs et donc bientot j'espere des graph, suivant le pays et l'année sélectionné en faisant ca, si je sélectionne un autre pays ca ne va pas changer automatiquement la valeur de la donnée, ca mettra la valeur juste au lancement du site, donc il faut mieux que je le mette dans ma fonction principale qui fait des actions suivant si y a un changement

mais bon il faut quand meme que je sache comment récupérer la valeur que je vais chercher en ajax, parce que pour l'instant toutes les valeurs que je récupère je les envoies en html avec la commande la ... mais la je veux juste la récupérer pour l'utiliser dans une autre fonction ...
Modérateur
Bonjour, le json est une notation objet, tu peux donc pour le json suivant, accéder au valeurs anisi:


{
    "menu":
    {
        "id": "file",
        "value": "File",
        "popup":
        {
            "menuitem":
            [
                { "value": "New", "onclick": "CreateNewDoc()" },
                { "value": "Open", "onclick": "OpenDoc()" },
                { "value": "Close", "onclick": "CloseDoc()" }
            ]
        }
    }
}
// ce json est stocké dans myJson

alert( myJson.menu.popup.menuitem[2].value ); //affichera Open

Modifié par kustolovic (24 May 2012 - 10:50)
Pour afficher les éléments dans ton code :
var res="";
for(var j=0;j<chart.series.data.length;j++){
res+=chart.series.data[j]
}
alert(res)
oula j'ai pas tout saisi la XD

merci de ton aide, mais a quoi correspond tout ca, enfin je dois le mettre ou ? avec mes autres fonctions javascript ?

le id: file et value File, ca correspond a quoi ? je dois mettre quoi ?

donc si je fais ca c bon ? :

function certif_level (certiflevel) {			
var url;							
url= "type_data=Certification_Level&type_areaOUcountry=Learner_Country&nom_data=" + certiflevel + "&year=" + selected_year + "&month=all&areaOUcountry=" + save_country;
ajax_call (url, function(json){		
       value= myJson.menu.popup.menuitem[2].value;		
});				 
return value;	
}


mais ici pourquoi ca serait dans my json ? c'est un truc par defaut ?

Si tu pouvais m'expliquer un peu plus ca serait sympa ^^

Peace
ok naemesis mais ca me dit pas comment récupérer la valeur de la fonction ajax_call qui est dans le json ....
enfin je crois pas ...
Regarde déjà a quoi ressemble ce que tu récupères, avec les objets, vaut mieux être sur de ce qu'on a à récupérer au lieu de retaper tout le code après en se rendant compte qu'on récupère pas ce qu'on veut.
Pages :