Problème AJAX Objet attendu

emjy -  
 emjy -
Bonjour,
Je galère vraiment pour afficher l'heure via AJAX (pour utiliser AJAX en vérité) et j'aimerais savoir si certains d'entre vous pourrez m'apporter quelques aides ou conseils.
Après un bon moment, j'ai réussi à avoir un résultat sous IE7, la page mettait du temps a démarrer, affichait une message "Out of Memory at line XX", puis l'heure s'affichait et s'actualisé comme il faut (ça ne marchait pas sous Firefox).
J'ai donc procédé à divers essais pour pallier au problème mais me voici maintenant confronté à un nouveau problème : rien ne s'affiche sous IE7 et Firefox.
D'ailleurs sous IE7, lorsque je regarde les erreurs, j'y voit l'erreur "Objet attendu ligne 5 caractère 1". O_o !
(PS : Ne connaissant pas bien le JavaScript, je commence à penser que le JavaScript est le pire des langages jamais conçu. Reprenez moi si je me trompe ^^)

Je vous envois mon code :

Page index.php :
<html>
<head>
<script type="text/javascript" src="ajax.js"></script>
</head>
<body onLoad="setTimeout(afficher_heure(),1000);"> <!-- ça serait soit-disant ici mon erreur -->
<div id="maFonctionAAfficher"></div>
</body>
</html>

Page ajax.js :
function afficher_heure()
{
var xhr;
try
{
xhr = new ActiveXObject('Msxml2.XMLHTTP');
}
catch (e)
{
try
{
xhr = new ActiveXObject('Microsoft.XMLHTTP');
}
catch (e2)
{
try
{
xhr = new XMLHttpRequest();
}
catch (e3)
{
xhr = false;
}
}
}

if(!xhr)
{
alert("Erreur !");
return;
}

xhr.onreadystatechange = function(){
if(xhr.readyState == 4)
{
if(true))
document.getElementById("maFonctionAAfficher").innerHTML = unescape(xhr.responseText);
else
document.getElementById("maFonctionAAfficher").innerHTML = "Error code " + xhr.status;
}
}

xhr.open("POST","./traitement.php",true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.send("ok=1");
}

Page traitement.php :
<?php
function heure(){
echo date("d/m/Y H:i:s");
}
if(isset($_POST['ok'])){
heure();
}
?>

Enfin, je précise que je veux absolument passer par une page de code PHP comme traitement.php car j'aimerais plus tard, adapter le code pour permettre des actualisations plus poussées.
Merci d'avance pour l'aide que vous pourrez m'apporter.

Cordialement,
Emjy

4 réponses

Cisco
 
Salut,

rajoute des simples cote entre afficher_heure() pour voir:

<body onLoad="setTimeout('afficher_heure()',1000);">
0
emjy
 
Merci pour la réponse mais ça me met toujours la même erreur !
Si quelqu'un arrive à trouver une solution...
0
Cisco
 
Utilise cette méthode:

function getXmlHttpRequest()
{
var xhr = null;
if (window.XMLHttpRequest)
{
xhr = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
try
{
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else
{
alert('pas de XMLHttpRequest');
xhr = false;
}
return xhr;
}


puis:

xhr = getXmlHttpRequest()
xhr.onreadystatechange = Refresh;

et

function Refresh()
{
if((xhr.readyState == 4) && (xhr.status == 200))
{
...
}
}
0
emjy
 
Bon en fait, je viens de trouver, ça venait du code JavaScript qui était mal écrit, voici la bonne version pour ceux que ça intéresse, voici le ajax.js :

function afficher_heure()
{
var xhr;
try
{
xhr = new ActiveXObject('Msxml2.XMLHTTP');
}
catch (e)
{
try
{
xhr = new ActiveXObject('Microsoft.XMLHTTP');
}
catch (e2)
{
try
{
xhr = new XMLHttpRequest();
}
catch (e3)
{
xhr = false;
}
}
}

if(!xhr)
{
alert("Erreur !");
return;
}

xhr.onreadystatechange = function(){
if(xhr.readyState == 4)
{
if(xhr.status == 200)
document.getElementById("heure").innerHTML = unescape(xhr.responseText);
else
document.getElementById("heure").innerHTML = "Error code " + xhr.status;
}
}

xhr.open("POST","./traitement.php",true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.send("ok=1");
}

Sinon je précise que j'ai un peu modifié la page index.php (même si je pense que ça ne change rien) :

<html>
<head>
<script language="JavaScript" src="ajax.js"></script>
</head>
<body onLoad="setInterval('afficher_heure()',1000);">
<div id="heure"></div>
</body>
</html>
0