Bonjour,

Newbie avec javascript je ne me sort pas d'un problème avec la librairie prototype.js. C'est un problème de portée de variables.

Voici le script qui pose problème.

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
19
ProblemClass = Class.create();
 
ProblemClass.prototype = {
 
   initialize: function() {
 
      this.message = 'ceci est un message';
 
      new Ajax.Request( 'probleme.php', {method: 'get', onComplete: this.onCompleteMethode});
 
   },
 
   onCompleteMethode: function(response) {
 
      alert(this.message);
 
   }
 
}
La fonction alert dans la méthode onCompleteMethode renvoie 'undefined' . (j'utilise FireFox). Alors que this.message est bien défini dans la méthode initialize.

Le HTML utilisé est le suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html>
  <head>
	<script type='text/javascript' src='prototype.js'></script>
	<script type='text/javascript' src='probleme.js'></script>
 
  </head>
  <body>
      <script>
 
        var newDummy = new ProblemClass();
 
    </script>
  </body>
</html>
Pour info les xml et php référencés mais sans grand intérêt.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
<?php
 
echo  file_get_contents('probleme.xml');
 
?>
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
19
20
21
22
23
24
25
<?xml version='1.0' encoding='UTF-8'?>
<ajax-response>
	<response type="element" id="">
		<row>
			<Title>Titre1</Title>
			<FirstName>Prenom1</FirstName>
			<LastName>Nom1</LastName>
		</row>
		<row>
			<Title>Titre2</Title>
			<FirstName>Prenom2</FirstName>
			<LastName>Nom2</LastName>
		</row>
		<row>
			<Title>Titre3</Title>
			<FirstName>Prenom3</FirstName>
			<LastName>Nom3</LastName>
		</row>
		<row>
			<Title>Titre4</Title>
			<FirstName>Prenom4</FirstName>
			<LastName>Nom4</LastName>
		</row>
	</response>
</ajax-response>

Je vous remercie d'avance pour votre aide.

Sincèrement,

Roger