Exemple d'utilisation de la fonction AJAXExécute
Cet exemple permet de renvoyer une structure complexe dans une procédure appelée en Ajax pour exploiter le résultat dans une procédure navigateur.
// Appel d'une procédure Ajax qui retourne une chaîne Json
sZone est une chaîne
sZone = AJAXExécute(ajaxAppelSimple, ProcServeurRetourDonneesJson, "Tour Eiffel")
// Transforme le buffer JSon reçu en objet
EXTERNE JSON // Indique au compilateur de ne pas faire d'erreur sur JSON.xxxx (objet Javascript)
stZone est un objet dynamique = JSON.parse(sZone)
// Analyse du résultat
SI PAS stZone.bTrouve ALORS
Info("Zone non trouvée", stZone.sMessageErreur)
SINON
// Les points à afficher
UnePosition est une géoPosition
POUR n = 1 _À_ stZone.taCoordonnées..Occurrence
UnePosition.Latitude = stZone.taCoordonnées[n].rLatitude
UnePosition.Longitude = stZone.taCoordonnées[n].rLongitude
CarteAjouteMarqueur(CARTE_Plan, UnePosition)
FIN
// Le centre de la carte
UnePosition.Latitude = stZone.stCentre.rLatitude
UnePosition.Longitude = stZone.stCentre.rLongitude
CarteAffichePosition(CARTE_Plan, UnePosition)
// Le zoom
CARTE_Plan..Zoom = stZone.nZoom
ToastAffiche("Zone " + stZone.sNomZone + " affichée")
FIN
// ------------------------------------
// --Procédure serveur ProcServeurRetourDonneesJson
// ------------------------------------
PROCÉDURE ProcServeurRetourDonneesJson(...
sParametreNomZone est une chaîne <utile="Nom de la zone dont on veut les coordonnées">)
// Structure pour mémoriser un point
st_PointCarte est une Structure
rLatitude est un réel
rLongitude est un réel
FIN
// Structure à renvoyer à la page
st_DonneesPourCodeNavigateur est une Structure
sNomZone est une chaîne
// Pour gérer les cas d'erreur
bTrouve est un booléen
sMessageErreur est une chaîne
// Centre de la carte et zoom
stCentre est un st_PointCarte
nZoom est un entier
// Autres points
taCoordonnées est un tableau de st_PointCarte
FIN
// Variable pour stocker ce qu'il faut envoyer à la page
stResPourPage est un st_DonneesPourCodeNavigateur
// Variable pour les coordonnées d'un point
stUnPoint est un st_PointCarte
// Nom de la zone
stResPourPage.sNomZone = sParametreNomZone
// On pourrait rechercher la zone dans une base :
// SI pas HLitRecherchePremier(Zone, NomZone, sParametreNomZone) ALORS
// stResPourPage.bTrouve = Faux
// stResPourPage.sMessageErreur = "Zone non trouvé"
// SINON
// stResPourPage.bTrouve = Vrai
// // puis lecture des informations de la zone
// // etc.
// FIN
// Ici on renvoie des données en dur
stResPourPage.bTrouve = Vrai
// Ajout d'un point
stUnPoint.rLatitude = 48.860501
stUnPoint.rLongitude = 2.295683
TableauAjoute(stResPourPage.taCoordonnées, stUnPoint)
// Ajout d'un autre point
stUnPoint.rLatitude = 48.859352
stUnPoint.rLongitude = 2.297374
TableauAjoute(stResPourPage.taCoordonnées, stUnPoint)
// Ajout d'un autre point
stUnPoint.rLatitude = 48.856397
stUnPoint.rLongitude = 2.293040
TableauAjoute(stResPourPage.taCoordonnées, stUnPoint)
// Ajout d'un autre point
stUnPoint.rLatitude = 48.857478
stUnPoint.rLongitude = 2.291176
TableauAjoute(stResPourPage.taCoordonnées, stUnPoint)
// etc...
// Centre de la carte
stResPourPage.stCentre.rLatitude = 48.858288
stResPourPage.stCentre.rLongitude = 2.294453
// Zoom de la carte
stResPourPage.nZoom = 15
// Sérialise les données à transmettre à la page en JSON
bufJson est un Buffer
Sérialise(stResPourPage, bufJson, psdJSON)
RENVOYER bufJson