begin process at 2010 03 21 21:31:36
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Javascript / DHTML / Ajax

 > 

Framework

 > 

Ajax

 > 

Code s'exécutant "trop rapidement"


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

Code s'exécutant "trop rapidement"

samedi 24 janvier 2009 à 09:47:04 | Code s'exécutant "trop rapidement"

malik7934

Hello,

J'ai un problème bizarroïde : j'ai une fonction de contrôle en Ajax "treatProb" sur un formulaire qui en cas de succès met "1" dans un champ hidden, "0" sinon.

Ce résultat est utilisé ensuite dans mon code. Mais voilà, on dirait que ma fonction ajax met à jour trop lentement le champ de contrôle ou que la suite du code va trop vite car systématiquement la suite du code s'exécute un instant avant la mise à jour du champ :


// PARTIE AJAX
function getHTTPObject() {
    ...
}
var http = getHTTPObject();
function treatProb(){
    ...
   http.onreadystatechange = handleHttpResponse;
   ...
}
   
function handleHttpResponse() {
    if (ret != '1') document.getElementById('controle').value = '0';
    else document.getElementById('controle').value = '1';
    ...
}

// APPEL DANS MON CODE
treatProb()
if (document.getElementById('controle').value != '1') alert("Problème.");
else alert('Ok!');

Si je clique sur mon bouton submit et que le contrôle en Ajax est un succès, j'ai droit à "Problème". Si je reclique sans rien modifier, c'est "Ok!"...

Tests à l'appui "alert("Problème.")" s'exécute avant que treatProb() ait mis à jour le champt "controle"...

Une idée ??

Merci d'avance,
Malik7934

samedi 24 janvier 2009 à 10:24:07 | Re : Code s'exécutant "trop rapidement"

Bul3

Membre Club
bonjour,
http.onreadystatechange = handleHttpResponse;
ta requète est en asynchrone ?
oui : faut attendre que le readystate passe à 4
ajax envoi des infos ( avec readystate != 4 ) en cours de traitement
Cordialement
[mon Site][M'écrire]Bul

samedi 24 janvier 2009 à 10:33:38 | Re : Code s'exécutant "trop rapidement"

malik7934

Salut,

Pas sûr de comprendre ta réponse... quoi qu'il en soit il est à 4 :

function handleHttpResponse() {
    if (http.readyState == 4) {
        if (http.responseText.indexOf('invalid') == -1) {
            var xmlDocument = http.responseXML;
            var ret = xmlDocument.getElementsByTagName('rep').item(0).firstChild.data;

            if (ret != '1'){
                  ....

Merci pour ton aide
samedi 24 janvier 2009 à 10:40:23 | Re : Code s'exécutant "trop rapidement"

malik7934

Correction : "if (http.responseXML.indexOf('invalid') == -1)" et pas "if (http.responseText.indexOf('invalid') == -1) ", mais ça ne change rien...
samedi 24 janvier 2009 à 10:47:00 | Re : Code s'exécutant "trop rapidement"

Bul3

Membre Club
>>quoi qu'il en soit il est à 4 :
ah ben.. on ne le voyait pas ça.

>>var ret = xmlDocument.getElementsByTagName('rep').item(0).firstChild.data;
tu as fait un alert de ret ?  de responseXML ?
quoi qui n'y-a dedans ?

[mon Site][M'écrire]Bul

samedi 24 janvier 2009 à 10:55:54 | Re : Code s'exécutant "trop rapidement"

malik7934

Re-

Effectivement, je ne voulais pas mettre trop de code et j'ai râpé l'important.

responseXML est bête comme chou. Il vaut par exemple : <rep>0</rep>
Je récupère ensuite le contenu du tag "rep", soit le 0, et le stocke dans controle (<input type="hidden" name="controle" id="controle" value="" />)

J'ai fait un alert, et il a bien la valeur attendue. Mon problème est clairement dû au fait que dans "
treatProb(); if (document.getElementById('controle').value != '1') alert("Problème."); else alert('Ok!');" ce qui suit treatProb() s'exécute avant que treatProb est pu stocker la valeur retour dans controle...
samedi 24 janvier 2009 à 11:09:12 | Re : Code s'exécutant "trop rapidement"

Bul3

Membre Club
Réponse acceptée !
tel que tu nous décris ça semble devoir baigner
et ça ne le fais pas... difficile "sans voir"
quelques pistes :
__ retourner 0 ou 1 et tester responseText
__ j'utilise "toujours" le même style :

fonction ajax :
                http.onreadystatechange = function()
                {    if(http.readyState == 4)
                    {   on peut traiter la réponse http.responseText    }
                }
                http.open("POST ou GET", "http://....", true);
                http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
                ....
                http.send("paramètres");




ah.... je viens de percuter !
treatProb(); if (document.getElementById('controle').value != '1') alert("Problème."); else alert('Ok!');"
en javascript, on n'attend pas la fin du fonction pour continuer !
c'est à dire on lance la fonction treatProb(); et immédiatement on continue
à l'instruction suivante
tu devrais faire comme dans mon exemple.


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

samedi 24 janvier 2009 à 12:32:36 | Re : Code s'exécutant "trop rapidement"

malik7934

Salut,

Merci pour ta réponse.

Je ne savais pas que Javascript n'attendait pas la fin de l'exécution d'une fonction pour passer à la suite. Je trouve cela plutôt bizarre comme spécificité... anyway, j'ai suivi ton conseil et je m'en suis sorti, mais en utilisant une autre méthode que le stockage dans un champ "controle" car j'ai la nette impression que le problème d'exécution se répercute sur des bouts de codes tels que "http.onreadystatechange = function(){}".

Du coup, j'ai au final :

        var isWorking = false;
        var http = new XMLHttpRequest();

        if (!isWorking && http) {
            var v = document.getElementById('verif').value;

            http.open("GET", "controle.php?v=" + escape(v), true);
            http.onreadystatechange = function(){
                if (http.readyState == 4) {
                    if (http.responseText.indexOf('invalid') == -1) {
                   
                        var xmlDocument = http.responseXML;
                        var ret = xmlDocument.getElementsByTagName('rep').item(0).firstChild.data;
                        if (ret != '1'){
                            alert("Vous avez mal recopié le code de vérification.");
                            return false;
                        }                       
                        isWorking = false;
                    }
                }           
            };
            isWorking = true;
            http.send(null);
        }


Pas vraiment portable, mais au moins cela fonctionne

Merci bien !
samedi 24 janvier 2009 à 12:39:51 | Re : Code s'exécutant "trop rapidement"

Bul3

Membre Club

>> Je trouve cela plutôt bizarre comme spécificité...
s'il existait la possibilité de le faire sans siouxer...
je ne serais pas d'accord avec toi,
mais effectivement, ça peut poser des problèmes
au moins d'écriture

nickel si tout baigne
et merci du retour.

[mon Site][M'écrire]Bul



Cette discussion est classée dans : problème, code, contrôle, controle, trop


Répondre à ce message

Sujets en rapport avec ce message

problème avec un lien pr 2 iframes différentes [ par marcel67 ] je souhaiterai afficher 2 iframes différentes après avoir clickésur un même lien voila le code ke j'utilise ://<a href="img1.html" target="zone2" onMo Pb avec mon script de contrôle !! [ par seb3110 ] Salut ! Voilà, je débute en javascript, et j'ai un petit problème avec mon script qui me permet de contrôler les caractères saisis par l'utilisateur d Problème de compatibilié avec Netsape [ par thebigbang ] bonjour à vous, j'ai ce code js qui tourne bien sous IE, mais sous netscape ce ne marche pas du tout.L'argument select représente un select sur la pag Controle textarea quote [ par gallianofr ] Bonjour je recherche un script contrôlant si j'ai la structure qu'il faut dans un texte. J'ai une textarea ou la secretaire tape un texte puis modifie problème d'url javascript php [ par tweeder ] bonjourvoici mon code pour appeler la fonction qui affiche le pop up)" class="smallLinkBlack">Cal select, option, plantage ie. [ par Bichon63 ] Bonjourvoila mon soucis : je me sers d'une pop up pour mettre à jour un select dans une autre fenetre. dans cette pop up je créé mon javascript à part Controle SlideShow [ par Miloflyer ] Bonjours a tous. J'ai trouver cet bribe de code qui permet de faire une sorte de petit diaporama avec des photos, mais j'aimerai l'adapter... J'aimera problème de variable :*/ [ par GuilleW ] bonjour, mon problème est de l'ordre des cookies :Dans mon script j'enregistre un chiffre dans un cookie, puis je le rapelle via une autre page pour l problème ASP/Javascript [ par Groices ] Bonjour, Dans un fichier .asp, plus précisément dans une fonction javascript :Le code : document.all.ewe.innerHTML = ?? ;Le problème : Quand HTMLCon Problème de débutant => Placage du code dans la page html! -_-' [ par icomega57 ] Voilà:Je fais un site depuis seulement deux semaines et j'ai commencé ce site en html. Donc, chaque page avait son propre et son propre .Ensuite j'ai


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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 : 0,499 sec (4)

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