Page 1 sur 1

Firefox 2.0 ne reconnaît plus xmlHttpRequest ?

Publié : 07 nov. 2006, 13:02
par senacle
Voici le code :

Code : Tout sélectionner

<html>
  <head>
    <title tal:content="template/title">The title</title>
<script language='javascript' type='text/javascript'>
var xmlHttp = false;
init();

function init(){
/* Create a new XMLHttpRequest object to talk to the Web server */
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
  xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
  try {
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (e2) {
    xmlHttp = false;
  }
}
@end @*/

if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
  xmlHttp = new XMLHttpRequest();
}
}

function callServer() {


if (xmlHttp.readyState!=0)
{
	xmlHttp.onreadystatechange = function() {};
	xmlHttp.abort();
  xmlHttp = false;
  init();
        
}


  // Build the URL to connect to
  var url = "http://localhost/wnl/subscribe.php";

  // Open a connection to the server
  xmlHttp.open("GET", url, true);

  // Setup a function for the server to run when it's done
  xmlHttp.onreadystatechange = updatePage;


  // Send the request
  xmlHttp.send(null);
 
}


function updatePage() {
  if (xmlHttp.readyState == 4) {
    response = xmlHttp.responseText;
    document.getElementById("message").innerHTML = '';
    document.getElementById("appli").innerHTML = response;
    if (response=='') document.getElementById("appli").innerHTML = '<br><br>Aucun resultat.';
  }
}



</script>
  </head>
  <body>
<span id="message">loading...</span>
<div id="appli"></div>
<img src="Zeuro/Image/Verif" onload="callServer()" />
  </body>
</html>

Fonctionne très bien sous IE, mais pas sous FireFox 2.0
Erreur javascript sous FireFox 2.0 : uncaught exception: Permission refusée d'appeler la méthode XMLHttpRequest.open

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0

Publié : 07 nov. 2006, 13:14
par Mori
[Moderation]
salut,
je déplace dans la bonne section.

Publié : 07 nov. 2006, 13:55
par Invité
Je viens de faire un essai avec FireFox 1.5 : même problème.

Le code javascript n'est pas bon ?

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0

Publié : 07 nov. 2006, 14:17
par chBok
Tu devrais regarder dans ta console d'erreurs pour voir les erreurs javascript. :roll:
EDIT : oups, j'ai pas lu tout le post de départ, car l'erreur était indiquée... désolé

Quoiqu'il en soit, je n'ai pas vérifié le reste du code, mais il ne faut jamais appeler une fonction directement dans le corps du javascript, donc ton appel init(); doit être remplacé plutot par

Code : Tout sélectionner

window.addEventListener('load', init, false);
qui te fera un appel asynchrone de ta fonction d'initialisation. La raison est qu'au moment de l'appel, tous les objets DOM doivent être chargés, ce qui est surement le cas avec IE mais pas avec Firefox.

Publié : 07 nov. 2006, 16:02
par Invité
La solution est :

On ne peut lire des fichier que sur le serveur sur lequel se trouve la page en cours...

En l'occurence, le fichier http://localhost/wnl/subscribe.php n'est pas sur le même serveur que le fichier HTML qui l'appelle.

Il faut donc que je modifie en conséquence.

Merci.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0

Publié : 07 nov. 2006, 17:46
par chBok
Anonymous a écrit :La solution est :

On ne peut lire des fichier que sur le serveur sur lequel se trouve la page en cours...
Ah non, j'en doute. AJAX permet justement à une page Web de lire des données d'un lien URL quelconque.

Comme tu as placé un onload sur ton image, je persiste à penser que l'appel de ton script intervient trop trop par rapport au chargement asynchrone de la page Web.

Publié : 07 nov. 2006, 22:36
par Benoit
Je pense aussi que tu dois appeler init dans l'évènement onload de body.

Autre chose : sous IE tu appelles le contrôle ActiveX même si XMLHttpRequest existe en tant qu'objet natif (c'est le cas dans IE7). Tu devrais placer le

Code : Tout sélectionner

if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
  xmlHttp = new XMLHttpRequest();
}
avant le try je pense (et ne l'exécuter que si rien n'a été trouvé en natif bien sûr).

Publié : 08 nov. 2006, 09:13
par Invité
Voici le code modifié selon vos conseils :

Code : Tout sélectionner

<html>
	<head>
	<title tal:content="template/title">The title</title>
	<script language='javascript' type='text/javascript'>
	var xmlHttp = false;
	window.addEventListener('load', init, false);

	function init()
		{
		if (!xmlHttp && typeof XMLHttpRequest != 'undefined')
			{
			xmlHttp = new XMLHttpRequest();
			}
		else
			{
			try
				{
				xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
				}
			catch (e)
				{
				try
					{
					xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
					}
				catch (e2)
					{
					xmlHttp = false;
					}
				}
			}
		}

	function callServer()
		{
		if (xmlHttp.readyState!=0)
			{
			xmlHttp.onreadystatechange = function() {};
			xmlHttp.abort();
			xmlHttp = false;
			init();
			}

		// Build the URL to connect to
		var url = "http://localhost/wnl/subscribe.php";
		
		// Open a connection to the server
		xmlHttp.open("GET", url, true);

		// Setup a function for the server to run when it's done
		xmlHttp.onreadystatechange = updatePage;

		// Send the request
		xmlHttp.send(null);
		}


	function updatePage()
		{
		if (xmlHttp.readyState == 4)
			{
			response = xmlHttp.responseText;
			document.getElementById("message").innerHTML = '';
			document.getElementById("appli").innerHTML = response;
			if (response=='')
				{
				document.getElementById("appli").innerHTML = '<br><br>Aucun resultat.';
				}
			}
		}

	</script>
	</head>
	<body onload="callServer()" >
		<span id="message">loading...</span>
		<div id="appli"></div>
		<img src="Zeuro/Image/Verif"/>
	</body>
</html>
Ca ne marche toujours pas sous Firefox...et ça ne marche plus sous IE !!!

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0

Publié : 08 nov. 2006, 09:28
par chBok
Voilà quelques pages qui devraient t'aider à comprendre comment faire fonctionner AJAX pour tous les navigateurs :
# http://developer.mozilla.org/fr/docs/AJAX:Premiers_pas
# http://www.mozilla.org/xmlextras/tests.html

Publié : 08 nov. 2006, 13:41
par Invité
AJAX permet justement à une page Web de lire des données d'un lien URL quelconque
Sur le site http://developer.mozilla.org/fr/docs/AJAX:Premiers_pas, il y a la remarque :

Pour des raisons de sécurité, il n'est pas possible d'appeler des pages se situant sur un autre domaine. Veillez à utiliser le nom de domaine exact sur toutes vos pages ou vous obtiendrez une erreur 'permission denied' à l'appel d'open(). Une erreur courante est de charger le site via domaine.tld, mais d'essayer d'appeler des pages avec www.domain.tld.


La page qui contient le code javascript est sur localhost:8080
La page appelée par le javascript (http://localhost/wnl/subscribe.php) est sur localhost (donc sur le port 80).

Il s'agit bien du même domaine, mais sur un port différent.
Est-ce là le problème ?

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0

Publié : 08 nov. 2006, 14:31
par Invité
Ca y est, c'est bon.

Effectivement, il faut absolument que le domaine soit le même, port compris.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0