Code : Tout sélectionner
/* Mon fichier "mesvilles.js"
#
# Il est généré automatique en PHP à partir de la lecture
# de la base MySql, même ce texte
#
*/
/*
Je mets ces données-là, mais je ne pense pas que ce soit
celles dont tu as besoin. À toi de voir…
*/
const MESVILLES = {
75001: "Paris",
90000: "Belfort",
25200: "Montbéliard",
93500: "Pantin",
29380: "Cholet",
etc.
}
Code : Tout sélectionner
<script language="javascript" […] src="monDossierJS/mesvilles.js" />
Code : Tout sélectionner
if ( nomVille=MESVILLES[lecode]/*un seul "=", c 1 affectation*/ ) {
alert("La ville existe ! C'est « Trifouilli les Oies ! »");
}
else alert("Va te faire voir chez les grecs, peut-être qu'ils connaissent"
+ " ton bled.");
36500 ? C'est tout ? Mais c'est de la rigolade, ça. Si mes applis javascript pouvaient manipuler aussi peu de données (en plus, des courtes comme des noms de villes et des codes postaux), je serais le plus heureux des hommes !Il y a 36500 villes repertoriés dans la base
Ben là, il y a aucun problème, puisque le fichier est manipulé côté client. Je veux dire : il est "chargé" côté client, donc rien à faire du nombre d'utilisateurs. Il pourrait y avoir 5000000 personnes en même temps que ça n'y changerait rien (à ce niveau-là en tout cas).et l'application sera utiliser par 2000 personnes en même temps...
J'en profite pour t'interroger, puisque tu as l'air d'en savoir beaucoup plus long que moi. D'abord, est-ce que tu pourrais m'expliquer où se fait le tri dans le code que je proposais ? Est-ce que, pour dire ça, tu te places à un niveau très bas (parce qu'au niveau langage, on est d'accord qu'il n'y a pas de tri, n'est-ce pas ?)le Javascript a une facheuse tendance à prendre énormément de temps pour faire des tris de cette sorte
Code : Tout sélectionner
var monTableau = new Array() ;
monTableau[0] = "Toto" ;
monTableau[1] = "Tintin" ;
monTableau[2] = "Titi" ;
monTableau[3] = "Turlututu" ;
monTableau[4] = "Toutout" ;
monTableau[5] = "Tarentino" ;
Code : Tout sélectionner
if ( quiEsTu = monTableau[idselected] )
alert("Je t'ai reconnu, tu es " + quiEsTu) ;
Code : Tout sélectionner
var delBiz = "^#" ;
function in_array(element, liste) {
return (delBiz+liste.join(delBiz)+delBiz).indexOf(delBiz+element+delBiz) > -1 ;
}
Euh, j'ai du mal m'exprimer...Est-ce que, pour dire ça, tu te places à un niveau très bas (parce qu'au niveau langage, on est d'accord qu'il n'y a pas de tri, n'est-ce pas ?)
Heu… où est-ce que tu vois un passage en revue séquentiel ? Je mets ma fonction complète :Ce que je voulais dire c'est que demander à javascript, qui est un langage interprété coté client, dans un contexte somme toute très particulier (il est completement dépendant du navigateur dans lequel il s'exécute), de passer en revue séquentiellement 36000 enregistrement (meme en prévoyant une condition de sortie) va sensiblement ralentir toutes les autres activités.
Code : Tout sélectionner
/*
Pré-requis : un tableau associatif MESVILLES a été défini, contenant
en clé le code postal, en valeur le simple string du nom de la ville
Syntaxe de chaque item du array MESVILLES :
MESVILLES[string(*) codepostal] = string nomDeLaVille> ;
(*) pour que "01254" ne devienne pas 1254 (octal ?)
*/
/*
Ma fonction appelée par l'utilisateur, après son
click sur le bouton (encore une fois : j'ai bien compris
que ça n'était pas le problème exact soulevé par DesmaT)
*/
function OnClickBoutonOK ( ) {
/* Je relève la valeur donnée par l'utilisateur
(pourrait aussi être passé en argument, mais bon…)
*/
var codeUser = document.getElementById('champ-codep').value;
if ( nomVille=MESVILLES[codeUser] )
alert("La ville s'appelle «"+nomVille+"»") ;
else
alert("Cette ville m'est inconnue.");
}
Justement, le probleme est qu'étant donné qu'un code postal peut correspondre à plusieurs villes, tu ne peux pas avoir un tableau associatif 1 CP <=> 1 villeCode : Tout sélectionner
/* Pré-requis : un tableau associatif MESVILLES a été défini, contenant en clé le code postal, en valeur le simple string du nom de la ville Syntaxe de chaque item du array MESVILLES : MESVILLES[string(*) codepostal] = string nomDeLaVille> ; (*) pour que "01254" ne devienne pas 1254 (octal ?) */
Code : Tout sélectionner
// Instanciation de mes villes (qui s'appelle CODES_POSTAUX,
// ce qui est plus logique maintenant)
// Ce tableau contiendra toutes mes instances de la classe suivante
var CODES_POSTAUX = new Array() ;
// Définition d'une classe CODEP
function CODEP() {
this.uniqueID ;
this.code ;
this.villes ;
this.nbvilles ;
this.departement;
this.region;
}
Code : Tout sélectionner
/* Proto pour initialiser l'instance
et la mettre dans mes villes
*/
CODEP.prototype.init = function ( leCode) {
this.code = leCode ;
var pref = leCode.substring(0,2) ;
this.departement = TABLEAU_DEPARTEMENTS[pref] ;
this.region = TABLEAU_REGIONS[this.departement] ;
/* etc. */
MESVILLES[leCode] = this ;
}
/* Proto pour ajouter une ville */
CODEP.prototype.addVille = function ( laVille ) {
if ( ! this.villes ) this.villes = new Array() ;
this.villes.push(laVille);
this.nbvilles++;
}
Code : Tout sélectionner
var cp = new CODEP() ;
cp.init(leNouveauCodePostalTrouved);
/* et pour chaque ville */
cp.addVille(laNouvelleVilleTrouved);
Code : Tout sélectionner
function EstCeQueVilleUnique(leCodeP) {
if ( dataCP=CODES_POSTAUX[leCodeP] ) {
return dataCP.nbvilles == 1 ;
}
else {
alert("Désolé, mais je ne connais pas ce code postal…");
return 0;
}
}
donc => ajaxAh si le javascript pouvait extraire d'une base ca serai vite réglé mais là je suis dans l'ignorance total...merci de votre aide.
LOL. C'est sûr que si c'est juste pour régler le problème de DesmaT, on peut difficilement faire plus compliqué.Certes... enfin de mon avis personnel, la grosse Bertha pour tuer la mouche, c'est toi qui viens de nous la sortir![]()
J'ai la flemme de chercher, donc : Ajax permet vraiment de lire dans une base de données (autre qu'en xml) ?donc => ajax
Code : Tout sélectionner
# Javascript, via l'eau de javel, lance…
# … Un script PHP qui va fouiller dans mySQL
# … et renvoie ses résultats au script javascript
# pour qu'il le traite intra muros
Ben c'est un peu de la rigolade, oui. À mon avis, tu trouveras ici et ailleurs plein d'éclaircissements sur cette question."Lorsque l'utilisateur clique sur le bouton, la fonction javascript envois le code postal à une fonction Php (et qui la lance), qui elle va chercher dans la base de donnée si le code postal est unique. Et la fonction Php ré appelle une fonction javascript qui va se charger d'ouvrir la popup ou de mettre à jour les champs." Comme ce que Phil93 propose dans son dernier message.
Je comprendrais le fonctionnement du code que j'éxecute et je ne pense pas que cela alourdirait l'utilisation du programme.
Cela est-il possible ?