bonsoir à tous,
voilà j'ai récupérer un jeux de fonction d'un script java et je souhaiterai le comprendre mais je rame un peu pourriez vous m'aider.

d’après ce que j'ai pu comprendre une fonction lance une requête équivalente à une ajax

et le programme interroger lui répond ceci

du XML si j'ai bien comrpis

var planeinfo=({"PilotID":"2807157","GamespyID":"Warbird","AircraftMake":"IRIS Pro Series","AircraftModel":"A-10A Thunderbolt II","AircraftType":"Twin Engine Close Air Support","Airline":"FFSII SW Air Force","FlightNumber":"1969","TailNumber":"F-WARB","Depart":"","Destination":"","FlightRule":"","FL":"0","Remarks":"","Alt":"12291","Heading":"183","Speed":"367","flat":null,"flon":null,"tlat":null,"tlon":null,"ComActive":"128.300","ComStandby":"0.000","Callsign":"FFS1969"}]);
var planeRoute=({"Lat":"21.0429489404169","Lon":"-86.8804860589014"},{"Lat":"21.0429772714059","Lon":"-86.8805292256772"},{"Lat":"21.040106843088","Lon":"-86.8786456455104"},{"Lat":"21.0464493993141","Lon":"-86.8896368286392"},{"Lat":"21.0382587908821","Lon":"-86.8800222884732"},{"Lat":"20.7700417958403","Lon":"-86.7739230474074"},{"Lat":"20.319911520392","Lon":"-86.772821498344"},{"Lat":"19.9041984755703","Lon":"-86.7501358070073"},{"Lat":"19.5072936924375","Lon":"-86.7349664990755"},{"Lat":"19.066667936549","Lon":"-86.7133521819686"},{"Lat":"18.5297588575728","Lon":"-86.7693976605613"},{"Lat":"17.9782364716868","Lon":"-86.8163565747566"},{"Lat":"17.4718063346645","Lon":"-86.8593925091305"},{"Lat":"16.9782568150085","Lon":"-86.9060745692278"},{"Lat":"16.5088206226079","Lon":"-86.9535261714001"}]);

comme vous le voyez dans l'écho, les variables sont nommé, c'est cool, mais comment les exploités.
j'ai donc ces fonctions qui doivent permettre d'extraire les données.

getdata()
function getdata() 
    {

        setTimeout('getdata();', 30000);//tempo pour rafraichissement des données

        xmlHttp = GetXmlHttpObject(); //lancement de la fonction GetXmlHttpObject()
        if (xmlHttp == null) 
            {
                return; //si xmlHttp est vide ??
            }
        var url = "http://www.fsopen.co.uk/maps/data.php"; //adresse pour une recherche d'info équivalent requéte ajax
        url = url + "?HostID=7240"; //complément d'adresse méthode GET
        xmlHttp.onreadystatechange = stateChangeddata; //??
        xmlHttp.open("GET", url, true); //envoie de paramétre méthode GET sélectionnez
        xmlHttp.send(null);//??

    }

function GetXmlHttpObject() 
    {
        var xmlHttp = null; //on vide xmlHttp
        try 
            {
                xmlHttp = new XMLHttpRequest(); //on tente d'allez chercher des infos, départ de la requêtes ajax où la fonction XMLHttpRequest() est connu de java??
            }
        catch (e) 
            {
                try 
                    {
                        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); //cherche si le format des données est en Msxml2??
                    }
                catch (e) 
                    {
                        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); //cherche si le format des données est en Microsoft??
                    }
            }
        return xmlHttp; //renvoie les infos dans xmlhttp
    }

function stateChangeddata() 
    {
        if (xmlHttp.readyState == 4) //??
            {
                //data = eval(xmlHttp.responseText);
                dataTXT = (xmlHttp.responseText); //??
                //alert(dataTXT);

                eval(dataTXT);//destroyoldplanes() //??

            }
    }

j'ai essayer de décrypter ce scrpit, mais y a des trous et l'architecture du try and catch est quelque peu brumeuse.

Pourriez vous m'aider à compléter les trous.

Merci d'avance flo

3 réponses


Vallyan
Réponse acceptée

Ce que l'ajax retourne, c'est du javascript tout con (assignation de valeurs a des variables), que tu pourrais mettre directement dans tes tag <scripts> ou dans ton fichier .js. La raison pour laquelle tu ne le fais pas c'est parce que tu veux mettre a jour ces variables toutes les 30s, par requête vers le serveur.

Ce script que tu récupère est alors interprété lorsqu'il est passé en paramètre a la fonction eval() [ligne 51], et il a pour effet d'assigner des valeurs aux variables planeInfo et planeRoute, dans ton JS. Ces 2 variables sont des tableaux d'objets (enfin planeInfo est un tableau avec 1 seule entrée)

La fonction getdata() [ligne 2] récupère ces variables et fait le boulot:

  • Elle boucle sur elle-meme toutes les 30 secondes [ligne 5].
  • Elle utilise pour de l'ajax qui a été placé dans une seconde fonction [GetXmlHttpObject()] pour la requete.
  • Une fois les data récupérées, elle lance la fonction stateChangeddata.

La fonction stateChangeddata() [ligne 43] est la fonction qui sait que faire des données récupérées.

  • Elle est executée en lieu et place de la fonction xmlHttp.onreadystatechange() [ligne 14],
  • et en fait elle se borne simplement a assigner les nouvelles valeurs aux variables planeInfo et planeRoute, tel qu'expliqué plus haut, via la fonction eval().

T'occupe pas du try catch ... c'est juste pour éviter un gros plantage si l'ajax foire.

Et donc pour les récupérer:

planeinfo[0].PilotID; // = 2807157
planeRoute[3].Lat; // = 21.0464493993141

etc ...

flo3376
Auteur

merci de ta réponse Vallyan, quelque points reste encore brumeux, mais je pourrait me débrouiller avec tes explication.