Firefox 2.0 ne reconnaît plus xmlHttpRequest ?

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Répondre
senacle

Firefox 2.0 ne reconnaît plus xmlHttpRequest ?

Message 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
Avatar de l’utilisateur
Mori
Animal mythique
Messages : 13311
Inscription : 30 avr. 2004, 19:17

Message par Mori »

[Moderation]
salut,
je déplace dans la bonne section.

Linux debian 12 bookworm stable / LXQt 1.2.0

Invité

Message 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
chBok
Iguane
Messages : 991
Inscription : 17 oct. 2003, 19:17

Message 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.
Dernière modification par chBok le 07 nov. 2006, 17:42, modifié 1 fois.
Invité

Message 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
chBok
Iguane
Messages : 991
Inscription : 17 oct. 2003, 19:17

Message 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.
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message 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).
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
Invité

Message 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
chBok
Iguane
Messages : 991
Inscription : 17 oct. 2003, 19:17

Message 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
Invité

Message 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
Invité

Message 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
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 34 invités