Ajax variable globale javascript

Résolu/Fermé
Ender-events Messages postés 200 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 23 mai 2014 - Modifié par Ender-events le 18/06/2013 à 02:11
Ender-events Messages postés 200 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 23 mai 2014 - 21 juin 2013 à 01:01
Bonjour, je veut que ma variable soit récupérer apres et je présise que j'ai tout fait pour que sa soit en mode synchrone

il y a plusieur fichiers
chat.php (racourci car pas trop iimportant
chat.js (synchrone)
chat2.js (asynchrone)

chat.php:
<head>
    <script type="text/javascript">
        var instancepseudo = '<?php echo $_SESSION["pseudo"] ?>';
        var instanceimg = '<?php echo $grav_url ?>';
    </script>
    <script type="text/javascript" src="chat.js"></script>
    <script type="text/javascript" async src="chat2.js"></script>
    </head>


chat.js
function afficheconverse() {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://localhost/Site/Traitement/chat.php?last=0');  // depuis php 0 pour recherche tout les messege
    xhr.onreadystatechange = function() { // vérif si aucune erreur. 200=OK crée une nouvelle fonction pour transmettre parametre
        if (xhr.readyState == 4 && xhr.status == 200) {
            if (xhr.responseText)
            {
            document.getElementById('chatbox').innerHTML = xhr.responseText;
            }
            
        }
        else if(xhr.readyState == 4 && xhr.status != 200) {
            alert(" Il y a une erreur avec le chat \n Code erreur: " + xhr.status + "\n veuillez réessayer ultérieurement");
        }
    };
    xhr.send(null);
};

function count() { // permet de connaitre la dernier valeur du array
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://localhost/Site/Traitement/chat.php?last=count'); 
    xhr.onreadystatechange = function() { // vérif si aucune erreur. 200=OK crée une nouvelle fonction pour transmettre parametre
    if (xhr.readyState == 4 && xhr.status == 200) {
            last= xhr.responseText;
        }
        else if(xhr.readyState == 4 && xhr.status != 200) {
            alert(" Il y a une erreur avec le chat \n Code erreur: " + xhr.status + "\n veuillez réessayer ultérieurement");
        }
    };
    xhr.send(null);
};

function refresh() {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() { // vérif si aucune erreur. 200=OK crée une nouvelle fonction pour transmettre parametre
        statechange(last);
    };
    xhr.open('GET', 'http://localhost/Site/Traitement/chat.php?last=' + last, false);  // depuis php rechercher le dernier message et false donc synchrone
    xhr.send(null);
function statechange(last) {
    if (xhr.readyState == 4 && xhr.status == 200) {
        if (xhr.responseText)
        {
        var newDiv = document.createElement('div');
        newDiv.id = last
        var div = document.getElementById('chatbox').appendChild(newDiv);
        div.innerHTML = xhr.responseText
        var last = parseInt(last)
        last= last + 1;
        }
    }
    else if(xhr.readyState == 4 && xhr.status != 200) {
        alert(" Il y a une erreur avec le chat \n Code erreur: " + xhr.status + "\n veuillez réessayer ultérieurement");
    }
};
};

function send() {
    var pseudo = instancepseudo;
    var img = instanceimg;
    var texte = document.getElementById("text-input").value;
    var xhr = new XMLHttpRequest();
    if (texte) {
        xhr.open('POST', 'http://localhost/Site/Traitement/chat.php');
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.send('pseudo=' + pseudo + '&img=' + img +'&texte=' + texte);
        document.getElementById("text-input").value = '';
    }
    else {
    alert("Vous n'avez rien écrit");
    alert(img);}
};
afficheconverse();
count();
setInterval(function() {refresh()}, 2500);


chat2.js:
document.getElementById('submittext').addEventListener('click', function() { //evenement pour envoyer message
    event.preventDefault();
    send();
    
}, false);



Pour le chat.js je vais diviser en 3 partie importante

function count;
function count() { // permet de connaitre la dernier valeur du array
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://localhost/Site/Traitement/chat.php?last=count'); 
    xhr.onreadystatechange = function() { // vérif si aucune erreur. 200=OK crée une nouvelle fonction pour transmettre parametre
    if (xhr.readyState == 4 && xhr.status == 200) {
            last= xhr.responseText;
        }
        else if(xhr.readyState == 4 && xhr.status != 200) {
            alert(" Il y a une erreur avec le chat \n Code erreur: " + xhr.status + "\n veuillez réessayer ultérieurement");
        }
    };
    xhr.send(null);
};


Cette fonction me permais de récupérer le dernier array ou un page php va vérifiée si un array existe.

P.S.: j'utilise un array multidimensionnelle.

function refresh:
function refresh() {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() { // vérif si aucune erreur. 200=OK crée une nouvelle fonction pour transmettre parametre
        statechange(last);
    };
    xhr.open('GET', 'http://localhost/Site/Traitement/chat.php?last=' + last, false);  // depuis php rechercher le dernier message et false donc synchrone
    xhr.send(null);
function statechange(last) {
    if (xhr.readyState == 4 && xhr.status == 200) {
        if (xhr.responseText)
        {
        var newDiv = document.createElement('div');
        newDiv.id = last
        var div = document.getElementById('chatbox').appendChild(newDiv);
        div.innerHTML = xhr.responseText
        var last = parseInt(last)
        last= last + 1;
        }
    }
    else if(xhr.readyState == 4 && xhr.status != 200) {
        alert(" Il y a une erreur avec le chat \n Code erreur: " + xhr.status + "\n veuillez réessayer ultérieurement");
    }
};
};


Me permait de chercher nouveau message

Les declancher
afficheconverse();
count();
setInterval(function() {refresh()}, 2500);//ou setInterval(refresh, 2500)


La variable last n'augmente pas.

1 réponse

Ender-events Messages postés 200 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 23 mai 2014 51
21 juin 2013 à 01:01
j'ai contourner le problèmes en ramplacent:
function statechange(last) {
    if (xhr.readyState == 4 && xhr.status == 200) {
        if (xhr.responseText)
        {
        var newDiv = document.createElement('div');
        newDiv.id = last
        var div = document.getElementById('chatbox').appendChild(newDiv);
        div.innerHTML = xhr.responseText
        var last = parseInt(last)
        last= last + 1;
        }


par :
function statechange(last) {
    if (xhr.readyState == 4 && xhr.status == 200) {
        if (xhr.responseText)
        {
        var newDiv = document.createElement('div');
        newDiv.id = last
        var div = document.getElementById('chatbox').appendChild(newDiv);
        div.innerHTML = xhr.responseText
        count()
        }


J'ai appelé la fonction count est sa marche.
1