11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous .
Voici mon problème, tout d'abord, voici le code :

for (i=0; i<segCnt; i++) {
		seg = segs[i];
		event = seg.event;
		$.ajax({ 
			type: "POST", 
			url: "./scripts/recup_champ.php",
		  	data: "id="+event.id,
		  	success: function(data){
		  		if(data == 'management'){
		  			classCouleur = 'couleur-management';
		  			return classCouleur;
				}
				if(data == 'langue'){
					classCouleur = 'couleur-langue';
					return classCouleur;
				}
				if(data == 'bureautique'){
					classCouleur = 'couleur-bureautique';
					return classCouleur;
				}
				if(data == 'sante'){
					classCouleur = 'couleur-sante';
					return classCouleur;
				}
				if(data == 'dif'){
					classCouleur = 'couleur-dif';
					return classCouleur;
				}
     		}
		});
		className = 'fc-event fc-event-hori ';
		className += classCouleur+' ';
		if (rtl) {
			if (seg.isStart) {
				className += 'fc-corner-right ';
			}
			if (seg.isEnd) {
				className += 'fc-corner-left ';
			}
			left = seg.isEnd ? dayContentLeft(seg.end.getDay()-1) : minLeft;
			right = seg.isStart ? dayContentRight(seg.start.getDay()) : maxLeft;
		}else{
			if (seg.isStart) {
				className += 'fc-corner-left ';
			}
			if (seg.isEnd) {
				className += 'fc-corner-right ';
			}
			left = seg.isStart ? dayContentLeft(seg.start.getDay()) : minLeft;
			right = seg.isEnd ? dayContentRight(seg.end.getDay()-1) : maxLeft;
		}
		html +=
			"<div class='" + className + event.className.join(' ') + "' style='position:absolute;z-index:8;left:"+left+"px'>" +
				"<a" + (event.url ? " href='" + htmlEscape(event.url) + "'" : '') + ">" +
					(!event.allDay && seg.isStart ?
						"<span class='fc-event-time'>" +
							htmlEscape(formatDates(event.start, event.end, view.option('timeFormat'), options)) +
						"</span>"
					:'') +
					"<span class='fc-event-title'>" + htmlEscape(event.title) + "</span>" +
				"</a>" +
				((event.editable || event.editable == undefined && options.editable) && !options.disableResizing && $.fn.resizable ?
					"<div class='ui-resizable-handle ui-resizable-" + (rtl ? 'w' : 'e') + "'></div>"
					: '') +
			"</div>";
		seg.left = left;
		seg.outerWidth = right - left;
	}


Je vais essayer de faire simple :
j'essaye donc de modifier une API, pour cela j'ai besoin de récupérer un champ pour faire varier la couleur de ma div.
Donc j'utilise AJAX, qui envoie le paramètre id que je récupère grace au "event.id". Ce dernier dépend de paramètre déclaré dans la boucle qui sont :

seg = seg[i];
event = seg.event;


Ensuite la page PHP me renvoit la valeur tant attendu. Avec cette dernière je test pour utiliser la class approprié.

Pourquoi, si je met un alert dans mes "if", il ne s'exécute pas?
Aussi ma boucle reste dans la fonction success et n'exécute pas le reste de la boucle !


Une explication et un exemple serait les bienvenue, merci de votre aide[/i][/i]
Salut,

Je pense que la boucle s'exécute mais te retourne une belle erreur "unefined variable classCouleur". regarde dans les outils de debug (dans ff : console d'erreur, firebug, dans ie : machin développeur)

L'ajax est asynchrone (par défaut), c'est pour ça qu'on lui donne une fonction de callback, pour qu'il l'exécute quand il à fini. Sinon un simple resultat = ma_fontion_ajax(...) aurait suffit Smiley cligne .

Il faut donc mettre tout le code lié à l'ajax dans la fonction success ou d'en d'autre fonction que success ira appelé.

Une remarque par contre. C'est pas plutôt seg = segs[ i] au lieu de seg = segs ?
(évite de mettre i entre accolade sur le fofo, il veut les remplacés par du bbcode Smiley ohwell )
Si c'est ce que je pense, après avoir fait ça un autre bug va apparaitre Smiley lol .
Et je te renvoie vers cette page qui parle des closures.