begin process at 2012 05 29 21:36:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Javascript / DHTML / Ajax

 > 

JavaScript Orienté objet (POO)

 > 

Divers

 > 

Problème temps de retour avec XMLHttpRequest


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème temps de retour avec XMLHttpRequest

mardi 30 septembre 2008 à 16:29:36 | Problème temps de retour avec XMLHttpRequest

destiny

Bonjour,

Avec XMLHttpRequest, j'effectue un traitement PHP assez conscéquent (environ 2/3s). Dans ma fonction ci-dessous, j'ai mis des tests qui normalement attente que la requete php soit terminé avant de passer les IF.

//Envoie des données
function sendData(method, url, data) {
  var xmlhttp = initXhrObj();

  if (!xmlhttp) return false;

    if(method == "GET") {
        if(data == 'null') {
            xmlhttp.open("GET", url, true); //ouverture asynchrone
        } else {
            xmlhttp.open("GET", url+"?"+data, true);
        }
       
      xmlhttp.send(null);
    } else if(method == "POST") {
        xmlhttp.open("POST", url, true); //ouverture asynchrone
        xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        xmlhttp.send(data);
       
    }
   
    if (xmlhttp) {
         xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    if (xmlhttp.responseText != null) {
                    eval(xmlhttp.responseText);
                   
                    return true;
                }
            }
         }
    }
}


Donc voila ma question :Comment faire pour etre sur que la requete php soit belle est bien terminée avant d'eval la reponseText ?


Merci d'avance, bye


Web master RACE24H
[ Lien ]
mercredi 1 octobre 2008 à 08:51:32 | Re : Problème temps de retour avec XMLHttpRequest

bultez

Membre Club
bonjour,
à priori ça doit baigner ce que tu fais....
je crois qu'il vaut mieux mettre la fonction avant le send.... mais bon....

  xml.onreadystatechange=function()
      {   if ( xml.readyState == 4 )
          {   if ( xml.status == 200 )
              .... tout est ok, c'est reçu
 ...
 xml.open( post ou get , url, true );
...
 xml.send(paramètres);


ch'tiote remarque :

    eval(xmlhttp.responseText);
donc le php renvoie du javascript ET UNIQUEMENT du javascript
sinon, ça plante.
et pourquoi ne pas mettre ce javascript dans la page directement ?
ça éviterait au moins un échange avec le serveur et l'EVAL qui est très gourmand ...

Cordialement
Bul[mon Site][M'écrire]

mercredi 1 octobre 2008 à 10:15:45 | Re : Problème temps de retour avec XMLHttpRequest

destiny

Ben en faite,

Je vais vous expliquez ce que je fais pour un meilleur compréhension. J'ai un question a plusieurs étape. Suivant les reponses, les etapes peuvent être differentes (je ne pas stoker le formulaire en cache) et recharger la page a chaque étape est tros lent (tout le questionnaire est en base de données avec des contitions à eval, etc un truc de porc). C'est pourquoi grace au XMLHttpRequest, sans rechargement de page, je n'ai pas besion de recalculer les étapes deja saisie et recuperer uniquement l'étape que je vuex.

Je renvoie une variable avec le questionnaire de l'étape concerné en html. mais ya rien a faire, il passe dans l'eval avant meme que la génération php de la var js ne soit terminé.


Web master LFGTR - RACE24H
[ Lien ]
mercredi 1 octobre 2008 à 10:35:28 | Re : Problème temps de retour avec XMLHttpRequest

bultez

Membre Club


certes, certes.... et ajax est là pour ça
          ( communication js <=> serveur sans réafficher la page ! )

ma remarque était uniquement sur eval.... qui ne fonctionnera
     que si le php retourne du javascript, et uniquement du javascript

     pas de html ( ou alors il faut d'abord l'extraire
     regarde comment font ce qu'on appelle framework ou même GAG ici )
     généralement, rapatrier du js ne sert strictement à rien,
     il suffit de le mettre dans la page appelante. point barre.

de plus en plus d'ailleurs, on voit utiliser ajax pour réinventer une
    communication normale entre js et le serveur ( formulaire.... )
    c'est pas fait pour ça. ajax ne devrait en principe ne renvoyer
    que des données... qui seront réexploiter par javascript.

>>avec le questionnaire de l'étape concerné en html. mais ya rien a faire,
>>il passe dans l'eval avant meme que la génération php de la var js ne soit terminé.
je ne pense pas. je n'ai pas contrôler ta séquence, mais respecte mon exemple
ET SURTOUT PAS d'EVAL sur du HTML ! ça plante !
il faut du javascript pur !

Cordialement
Bul[mon Site][M'écrire]

mercredi 1 octobre 2008 à 11:40:22 | Re : Problème temps de retour avec XMLHttpRequest

destiny

Ben cet HTML est dans une variable javascript ! avec j'ai juste a faire ex :

document.getElementById('QuestionEtape' + genEtape).innerHTML = etapeInnerHTML;

*etapeInnerHTML = "<div><table>.......</div>";

Bon j'ai réussit a contrôler cette erreur mais d'une facon un peu batarde ...

function nextEtape(nameForm) {
    var stringXmlHttpSend = "";
   
    if (!genEtape) {
        stringXmlHttpSend = getParamEtape(nameForm);
       
        urlSend = 'DevisV3_action.php?etape=' + DevisEtape + '&NumDevis=' + NumDevis + '&VersionDevis=' + VersionDevis + '&ElemDevis=' + ElemDevis + '&action=enrEtape&CdeEC=';
        sendData("POST", urlSend, stringXmlHttpSend);
       
        timer = setTimeout('nextEtape(\'' + nameForm + '\')', 500);
    } else {
        clearTimeout(timer);
       
        if (maxEtape <= genEtape) {
            alert("aucune etape suivante ! (recap ?)");
        } else {
            if (!etapeInnerHTML) {
                urlSend = 'DevisV3_action.php?etape=' + genEtape + '&NumDevis=' + NumDevis + '&VersionDevis=' + VersionDevis + '&ElemDevis=' + ElemDevis + '&action=etapteSuiv&CdeEC=';
                sendData("POST", urlSend, "");
               
                timer2 = setTimeout('nextEtape(\'' + nameForm + '\')', 1000);
           
            } else if (etapeInnerHTML && DevisEtape < genEtape) {
                clearTimeout(timer2);
               
                document.getElementById('QuestionEtape' + DevisEtape).style.display = "none";
                document.getElementById('QuestionEtape' + genEtape).innerHTML = etapeInnerHTML;
                document.getElementById('QuestionEtape' + genEtape).style.display = "block";
               
                DevisEtape = genEtape;
                genEtape = false;
                etapeInnerHTML = false;
               
                if (autoNextEtape) {
                    alert('autoNextEtape !');
                }
            }
        }
    }
    return true;
}


Cela fonctionne plutot sauf ... dommage que XMLHttpRequest n'est pas un peu plus de commandes a ce niveau de vérification

Encore merci Bultez pour ton aide !


Web master LFGTR - RACE24H
[ Lien ]
mercredi 1 octobre 2008 à 11:42:30 | Re : Problème temps de retour avec XMLHttpRequest

destiny

Grace a des setTimeout, je m'en sort plutot bien car ca fonctionne mais ce n'est pas trés dynamique ...


Web master LFGTR - RACE24H
[ Lien ]
mercredi 1 octobre 2008 à 11:59:23 | Re : Problème temps de retour avec XMLHttpRequest

bultez

Membre Club
ton doit onreadystatechange = function()  être "mal fait",  ou pas là où il faut....

mais malgré tout essaye donc :

<script>
    var t1="alert('toto');"
    eval(t1);
    t1="<input type='text' value='exemple'><script>alert('toto');<\/script>";
    eval(t1);
</script>


Bul[mon Site][M'écrire]



Cette discussion est classée dans : data, url, true, xmlhttp, if


Répondre à ce message

Sujets en rapport avec ce message

deux onchange dans un select [ par laticocotte ] Bonjour! j'essaie d'appliquer deux actions dans une liste déroulante à savoir j'ai une liste déroulante qui affiche en fonction de ce qui est choisi Ajax et formulaire mail [ par cynus ] Bonjours a tous. J'ai besoin de votre aide parce que je m'arrache les cheveux depuis 2 jours. du coté google rien, même des solutions clé en main ne 2 listes déroulantes liées, envoyer le div dans un autre formulaire ?? [ par lancelolo ] Bonjour et d'avance merci. Voilà mon problème. J'ai une page de saisie de véhicule avec 2 listes déroulantes liées (marque / type). Quand je sélectio Ajax et json [ par Mornaloce ] Bonjour, Voilà je vous explique mon problème : Je souhaite reproduire un site existant. Sur ce site j'ai des div imbriqué dans des div. Pour récupér XMLHttpRequest de GET à POST [ par djfayr ] Bonjour, je sollicite votre aide pour un petit truc tout bête, je voudrait juste changer la méthode de mon script XMLHttp Request qui fonctionne très Requête Ajax avec Jquery [ par monoski ] Bonsoir tout le monde j'aimerai bien passer à Jquery pour mes requêtes ajax qui sont codées actuellement en "dur" on va dire ^^ Alors ayant lu les do création d'une div pour les suggestions [ par loulou27 ] Bonjour à tous j'ai un souci avec un script que j'ai récupéré. le script c'est un formulaire qui génère des suggestions automatiquement. Le script en Problème de mise en forme [ par croftman ] Bonjour! Alors voila je souhaite avoir un site avec comme maquette : - Un menu en haut centré sur toute la longueur - A gauche une div avec un bg Problème de listes déroulantes liées / incompatibilité [ par dulcigirl ] Bonjour a tous ! Je suis étudiante et dans le cadre d'un projet, j'ai besoin de de réaliser des listes déroulantes liées.Jusque là, aucun soucis, les un combobox débloque 4 autres [ par jasou62114 ] Salut à tous, j'avai déjà posté pour relier 5 combobox les uns par rapport aux autres...Mais voilà la donne a changé et en fait je voudrai que lorsque


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,186 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales