11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'utilise ajax pour afficher une image en grand dans un paragraphe lors du clic sur une vignette

Les états obtenus avec readyState passent de 1 à 4 et lorsque le statut est 4, je remplace l'image. Le problème, c'est que onreadystatechange détecte un changement, readyState repasse à 1 (je ne sais pas pourquoi ? Smiley bawling ) et l'image de départ est réaffichée. C'est comme s'il n'y avait eu finallement aucun changement dans la page.

Le site n'est pas en ligne.

**************************************

Voici les fonctions javascript que j'utilise :


function getXhr()
{
    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("Votre navigateur ne supporte pas les objets XMLHTTPRequest, veuillez le mettre à jour");
        xhr = false; }
}
 
 
function changerPhoto1(idPhoto)
{
    getXhr();
  
   xhr.onreadystatechange = function()
                             {
                                
                                if(xhr.readyState == 4 && xhr.status == 200)
                                { // Nous remplacons le contenu du p#photo par le retour de "ajax/ax_nouvellePhoto.php" 
                                    document.getElementById('photo').innerHTML = xhr.responseText;
                                   
                                }
                                
                             }
    
    xhr.open("POST",'ajax/ax_nouvellePhoto.php',true);
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    xhr.send("id_img="+idPhoto); //ce qui est envoyé par POST
 
}
 


*****************************************
Voici le code de la page ax_nouvellePhoto.php

echo 'coucou';


Mon problème est donc :
Pourquoi l'état readyState change après avoir été 4 ? Du coup, ONreadyStateChange est appelée,et c'est pour cela que l'image n'est plus remplacée.

Merci de m'aider car je ne vois vraiment pas pourquoi ça fait ça. J'ai même essayé d'autres scripts qui m'ont donnés la même chose . Smiley biggol

Remarque : j'utilise firefox avec la barre web développeur. Lorsque j'ai testé sur IE, bizarrement je retourne à la page initiale (sans aucune modif)

@

Merci
Modifié par sylvainbucule (12 Aug 2008 - 18:23)
La solution m'a été donnée sur un autre site par Bovino (merci encore à lui)

la voici :
Si je fais par exemple :


<a href="" onclick="maFonction()">


Ma fonction va se lancer, puis après le href, qui ici recharge la page...
Donc, dans ce cas, il faut rajouter :


Bon, c'est sûr que cela reste un peu intrusif au niveau du javascript, j'en suis conscient. 
<a href="" onclick="maFonction();return false">

qui inhibe l'action du href.