Une fonction qui retourne toujours undefined

Fermé
dd27 - 10 sept. 2016 à 20:58
 dd27 - 11 sept. 2016 à 21:15
Bonjour, si quelqu'un peu m'aider, ce serai cool.
Voila je débute en programation et j'ai un souci avec cette fonction:

function file_exists(url) 
{
  var xhr = new XMLHttpRequest();
      
  xhr.open('GET', 'ajouCatPHP.php?file_exist='+url);
  xhr.onreadystatechange = function()
  {
 	    if(xhr.readyState == 4 && xhr.status == 200)
 	    {
 	        alert('result funcJS ligne 32 => '+xhr.responseText);
 	        return xhr.responseText;
        }
  }
  xhr.send(null);
} 


comment son nom l'indique elle sert à verifier l'existance d'un fichier. Le alert m'affiche bien la bonne réponse, donc pas de problème coté PHP. En revanche si je fais:

alert(file_exists(unUrlBidon));


j'obtiens un joli undefined alors que je devrais obtenir 11 si le fichier existe et 22 dans le cas contraire.

Pourquoi ce script ne fonctionne t-il pas?

Merci à vous.



A voir également:

2 réponses

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718
11 sept. 2016 à 00:38
Bonjour,

Tu utilises l'ajax en asynchrone....

En javascript, tous les appels AJAX sont asynchrones, c'est-à-dire que l'exécution du Javascript n'est pas bloquée en attendant la réponse du serveur. Lors de chaque appel AJAX, on indique une fonction callback en javascript, et cette fonction sera appelée par le moteur javascript du navigateur lorsque celui-ci aura reçu la réponse du serveur.

Je pense qu'il faut le passer en synchrone

var fexist = false;
function file_exists(url) {
  var xhr = new XMLHttpRequest();  
  xhr.open('GET', 'ajouCatPHP.php?file_exist='+url,false); //le false force en SYNCHRONE

  xhr.onreadystatechange = function()  {
      if(xhr.readyState == 4 && xhr.status == 200){
 	     alert('result funcJS ligne 32 => '+xhr.responseText);
 	     return xhr.responseText;
      }
  }
  xhr.send(null);
}

0
Bonjour jordane45, merci pour ta réponse. Je viens de tester ton idée, hélas, le problème persiste toujours.
Si vous avez d'autre idée je suis preneur.
Merci
0
Utilisateur anonyme
11 sept. 2016 à 10:10
Si je comprend bien ta fonction te retourne undefined au lieu d'une réponse fournie par ton PHP?

Essaye ça pour voir ce que tu obtiens:

function file_exists(url) 
{
	var xhr = new XMLHttpRequest();

	xhr.open('GET', 'ajouCatPHP.php?file_exist='+url);
	xhr.onreadystatechange = function()
	{
		if(xhr.readyState == 4 && xhr.status == 200)
		{
			alert('result funcJS ligne 32 => '+xhr.responseText);
			return xhr.responseText;
		}
		else
		{
			alert('Une erreur s\'est produite');
			return 'error';
		}
	}
	xhr.send(null);
}
0
dd27 > Utilisateur anonyme
11 sept. 2016 à 10:36
bonjour ZeNairolf, oui tu as bien compris le probleme.
désolé, meme topo, j'ai toujours indefined en retour le alert('Une erreur s\'est produite'); s'affiche, mais c'est normal puisqu'il y a 4 étapes lors de la transmitions de données
0
Utilisateur anonyme
11 sept. 2016 à 10:41
Et ton code PHP ça donne quoi? Car là je pense que ça vient de là. Sinon si t'ouvres l'inspecteur de code, quand tu as une erreur tu as bien une "erreur" 200, signe que la page a bien été récupérée?
0
dd27 > Utilisateur anonyme
11 sept. 2016 à 11:13
Non le php est ok car le alert('result funcJS ligne 32 => '+xhr.responseText); affiche la bonne réponse.
A mon avis si alert(file_exists(unUrlBidon)); affiche undefined, c'est par se que le alert est executé avant que la fonction ne soit terminée d'etre exécutée

donc comment faire en sorte que mon alert(file_exists(unUrlBidon)); soit éxécuté une fois que ma fonction file_exist à fini sont boulot?
0
oui si j'ai 11 le fichier existe si j'ai 22 le fichier n'existe pas ou l'url n'est pas bonne.
0