Partage
  • Partager sur Facebook
  • Partager sur Twitter

Appel multiple sur la même fonction JS

Sujet résolu
    11 août 2010 à 11:09:50

    Bonjour,

    J'ai un problème en Php et Javascript, et je ne parviens pas à trouver des réponses sous Google.

    Je fais un appel Ajax et la réponse attendue est générée par un autre appel Ajax.
    Mon premier appel Ajax est fait 3 fois dans la même page avec un paramètre différent. Ces appels permettent de remplir grâce à des innerHtml des divisions.

    Après plusieurs tests, les retours de la fonction avec les paramètres différents retournent le bon résultat.
    Appelé trois fois séparément (pas dans la même page), le résultat attendu est là, par contre appelé trois fois dans la même page, les trois appels retournent le même résultat (le dernier).

    Le code sera surement plus clair:

    PHP :
    <div id='attachedFiles' style='text-align: left;'> 
        <script type="text/javascript"> 
            getUpload("<?php echo $id_project;?>", "", "","<?php echo $_SESSION["login"];?>"); 
        </script> 
    </div> 
    <div id='attachedFilesSolution' style='text-align: left;'> 
        <script type="text/javascript"> 
            getUpload("<?php echo $id_project;?>", "", "solution","<?php echo $_SESSION["login"];?>"); 
        </script> 
    </div> 
    <div id='attachedFilesWhereUsed' style=' text-align: left;'> 
        <script type="text/javascript"> 
            getUpload( "<?php echo $id_project;?>", "", "whereUsed","<?php echo $_SESSION["login"];?>" ); 
        </script> 
    </div>
    



    JS :
    function getUpload(project, cr, type, login){ 
        if (window.XMLHttpRequest) // Mozilla, Safari, ... 
            xmlhttp = new XMLHttpRequest(); 
        else if (window.ActiveXObject) // IE 
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     
     
        xmlhttp.open("GET", "TestUpload.php?project="+project+"&cr="+cr+"&type="+type+"&login="+login+"&random="+Math.random()); 
        xmlhttp.onreadystatechange=function() 
        { 
            if (xmlhttp.readyState == 4) 
            { 
                // select the section to display 
                if(type == ""){ 
                    var div = "attachedFiles"; 
                }else if(type == "solution"){ 
                    var div = "attachedFilesSolution"; 
                }else if(type == "whereUsed"){ 
                    var div = "attachedFilesWhereUsed"; 
                } 
                 
                document.getElementById(div).innerHTML = xmlhttp.responseText; 
                     
            } 
        }; 
        xmlhttp.send(null); 
    }
    



    On voit donc ici que mes trois appels sont donc redirigé vers leur div respectives

    Voici le code généré : :


    <div id='attachedFiles' style='text-align: left;'> 
        <script type="text/javascript"> 
            getUpload("156", "", "","zztest"); 
        </script> 
    </div>
    


    Voilà plusieurs jours que je bloque dessus et la mise en production de cette fonctionnalité doit se faire très rapidemen.

    Merci d'avance pour votre aide :D .
    • Partager sur Facebook
    • Partager sur Twitter
      11 août 2010 à 13:31:12

      Citation : Gajilidd

      Je fais un appel Ajax et la réponse attendue est générée par un autre appel Ajax


      Je vois pas où la réponse est générée par un autre appel Ajax...

      Je vois pas pourquoi tu envois une variable random dans les paramètre, si c'est vraiment nécessaire ça serais plus rapide de le faire côté php...

      Et une chose à savoir (qui m'a étonné aussi) c'est que (sous firefox en tout cas) si tu envois plusieurs requêtes AJAX sans attendre la réponse entre chaque, et bien c'est la toute dernière requête qui renverra sa réponse en 1ère (surement à cause d'un système de file) par conséquent si tu a besoin d'une réponse pour générer une autre réponse, soit tu revois ton système pour ne faire qu'une requête qui combinera tout, soit tu envois tes requêtes de façon synchrones.
      • Partager sur Facebook
      • Partager sur Twitter
        11 août 2010 à 13:50:41

        Oui la variable random lors de l'appel est nécessaire, car il me semble que sous IE si l'adresse est la même il utilise le cache automatiquement.

        La seconde requête Ajax est faite dans la page TestUpload.php.

        En ce qui concerne le problème sous firefox, je test sous safari et le problème a l'air similaire. Comment contourner ce problème? Avec des thread? Il me semble que Javascript n'est pas optimisé pour ces utilisations.


        En fait la solution est des plus simple.

        xmlhtml est prise comme Variable globale alors que var xmlhtml non. De ce fait mes appels s'écrasaient les un les autres.


        Voilà,
        Merci à vous :) .
        • Partager sur Facebook
        • Partager sur Twitter

        Appel multiple sur la même fonction JS

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown