Récuperation de la variable retournée par une fonction

Bonjour, voilà mon problème :

j’ai une fonction envoi_form qui envoie les données d’un formulaire à une page php, et qui reçoit les codes d’erreur sous forme d’une chaine de caractères du type : 101,102,201…
Le but est que la fonction envoi_form retourne cette chaine de caractères.

De plus, j’ai une fonction valider_form, qui doit se charger de la validation d’un formulaire : elle appelle la fonction envoi_form, recupere les codes d’erreur, fait la correspondance avec les messages d’erreurs correspondants, et les affiche.

Le problème est que je n’arrive pas à récuperer les codes d’erreurs dans ma deuxième fonction.

Voici les fonctions en question :

function envoi_form(form,lien)

	{

	var xhr = getXMLHttpRequest();

	if(xhr && xhr.readyState != 0)

		{

		xhr.abort(); //si une requete etait déjà en cours, elle est annulée

		}

	xhr.onreadystatechange = function() 

		{

		if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))

			{
			reponse = xhr.responseText;

			document.getElementById('erreurs').innerHTML = "";

			alert(reponse + '(fonction)'); //on voit que la variable reponse contient ce qu'il faut
			return reponse;

			} 
		else if(xhr.readyState == 2 || xhr.readyState == 3) 

			{

			document.getElementById('erreurs').innerHTML = "<p>Envoi en cours</p>";

			}

		}

	

	formulaire = document.getElementById(form);

	parametres = '';

	for(i=0;i<formulaire.length;i++)

		{

		valeur = encodeURIComponent(formulaire.elements[i].value); //encodage du parametre

		if(i>0)

			{

			parametres += '&';

			}

		parametres += formulaire.elements[i].name + '=' + valeur; //ajout du parametre à la liste des parametres déj enregistrés

		}

	//alert(parametres);

	xhr.open("POST", lien, true);

	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

	xhr.send(parametres); //envoi des parametres

	}
function valider_form(form,lien)

	{
	//alert(envoi_form(form,lien));

	var reponse_erreurs = envoi_form(form,lien); 
	alert(reponse_erreurs);//la variable reponse erreurs ne contient rien

	//on traite ensuite les codes d'erreur
. 
//Cette partie n'est pas encore faite, car je n'arrive pas à recuperer les codes d'erreurs
	}


Cela fait maintenant un moment que j’essaie de retourner ce code dans tous les sens, en mettant des alert() un peu de partout, et je ne trouve pas mon erreur. Si quelqu’un a une idée, il me serait d’un grand secours.

Oulah…

Encore un qui s’est perdu avec le principe même de l’asynchronisme…

asynchrone = processus non bloquant.

Quand tu appelle envoi_form, tu vas juste ouvrir une connexion, et tu auras derrière une fonction qui va gérer les changements d’état (onreadystatechange). En l’occurrence, pour être plus clair :

xhr.open("POST", lien, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(parametres); //envoi des parametres

Quand tu appelles send, tu ne bloques pas sur ce traitement. Donc tu sors tout de suite de ta fonction. D’où pas de renvoi (et de plus, tu le fais dans une autre fonction donc ça risque encore moins de fonctionner:))

Si tu veux gérer tes codes d’erreur, c’est dans le onreadystatechange là où tu colles ton return reponse.

Merci beaucoup, je crois que j’ai compris. je vais placer la fonction qui gère les codes d’erreur à l’endroit que tu m’as indiqué.