Rechercher : dans
Par :

Problème AJAX Objet attendu

Dernière réponse le 24 sep 2008 à 20:45:15 emjy, le 24 sep 2008 à 19:55:32 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Firefox 3.0.1

Meilleures réponses pour « Problème AJAX Objet attendu » dans :
Ajax - Javascript - Upload multiple VoirIntroduction Création de l'uploader Script côté serveur (upload.php) Téléchargement des Fichiers Multiples Génériques en Ajax Introduction AJAX Upload vous permet de facilement télécharger plusieurs fichiers sans rafraîchir la page et...
Découper un objet de l'arrière plan (détourage) VoirParfois on peut vouloir découper un objet de son arrière-plan, par exemple un visage, un fruit posé sur une table, etc. L'outil habituellement utilisé est le lasso, mais l'opération est délicate. On peut également utiliser des calques, mais dans...
Déplacement automatique d'un objet sur une diapositive VoirCette astuce permet le déplacement automatique d'un objet sur une diapositive. Exemple : Une voiture se déplace de Paris à Marseille sur une carte de France avec un détour par la Vendée Voilà comment procéder: 1. mettre l'image souhaitée en...
Javascript - L'objet Date VoirLes particularités de l'objet Date L'objet Date permet de travailler avec toutes les variables qui concernent les dates et la gestion du temps. Il s'agit d'un objet inclus de façon native dans Javascript, et que l'on peut toujours utiliser. La...
Javascript - L'objet String VoirLes particularités de l'objet String string est un mot anglais qui signifie "chaîne", il s'agit en fait de chaîne de caractères. L'objet String est un objet qui contient un certain nombre de propriétés et de méthodes permettant la manipulation...
Javascript - l'objet Array VoirLes particularités de l'objet Array L'objet Array est un objet du noyau Javascript permettant de créer et de manipuler des tableaux. Voici la syntaxe à utiliser pour créer une variable tableau : var x = new Array(element1[, element2, ...]); Si...

1

Cisco, le 24 sep 2008 à 20:08:55

Salut,

rajoute des simples cote entre afficher_heure() pour voir:

<body onLoad="setTimeout('afficher_heure()',1000);">

Répondre à Cisco

2

emjy, le 24 sep 2008 à 20:24:08

Merci pour la réponse mais ça me met toujours la même erreur !
Si quelqu'un arrive à trouver une solution...

Répondre à emjy

3

Cisco, le 24 sep 2008 à 20:42:52

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))
{
...
}
}

Répondre à Cisco

4

 emjy, le 24 sep 2008 à 20:45:15

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>

Répondre à emjy
Collection CommentÇaMarche.net