[AJAX] Requêtes dans le Javascript
Bonjour,
j'ai récupéré une application qui est vraiment trop bizarre, ou du moins, je n'avais jamais vu ce fonctionnement auparavant : quasiment tout le code de l'application est dans le JavaScript. Prenons par exemple la page d'accueil, qui est composée d'une frame, dont la source est un fichier HTML, qui contient uniquement 2 lignes :
Code:
1 2
| <script type="text/javascript" src="/Javascript/Global.js"></script>
<script type="text/javascript" src="/Init.js"></script> |
Enfin, dans Init.js, j'ai ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| //Demande d'habilitation si l'utilisateur n'est pas identifié
if (F_Get("ID") != "" && F_Get("MP") != "") {
if (F_Get("HA") != "") {
var Requete = "SELECT ";
Requete += "Code, Entite ";
Requete += "FROM Habilitations ";
Requete += "WHERE ";
Requete += "Code = '" + F_Get("Code") + "' AND ";
Requete += "Identifiant = '" + F_Get("ID") + "' AND ";
Requete += "MotDePasse = '" + F_Get("MP") + "' ";
var IdentifiantXml = F_Sjax(Requete);
if (IdentifiantXml.getElementsByTagName("Data")[0].firstChild != null) {
parent.Session.Identifiant.value = F_Get("ID");
parent.Session.Entite.value = IdentifiantXml.getElementsByTagName("Entite")[0].firstChild.data;
F_PageCharger("FO-SI-002",F_Get("Code"));
}else{
parent.Menu.window.location = "/Html/Menu.html";
}//end if
}else{
var Requete = "SELECT ";
Requete += "Code, Entite ";
Requete += "FROM Habilitations ";
Requete += "WHERE ";
Requete += "Identifiant = '" + F_Get("ID") + "' AND ";
Requete += "MotDePasse = '" + F_Get("MP") + "' ";
var IdentifiantXml = F_Sjax(Requete);
if (IdentifiantXml.getElementsByTagName("Data")[0].firstChild != null) {
parent.Session.Identifiant.value = F_Get("ID");
parent.Session.Entite.value = IdentifiantXml.getElementsByTagName("Entite")[0].firstChild.data;
parent.Menu.window.location = "/Html/Menu.html";
}else{
parent.Menu.window.location = "/Html/Menu.html";
}//end if
}//end if
}else{
parent.Menu.window.location = "/Html/Menu.html";
}//end if |
Voici le code des différentes fonctions utilisées ci-dessus :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| function F_Get(Parametre) {
// Suppression du point d'interrogation
var ListeParametres = window.location.search.slice(1,window.location.search.length);
// Séparation des parametres
var Parametres = ListeParametres.split("&");
var Valeur = "";
for(i=0;i<Parametres.length;i++){
if (Parametres[i].split("=")[0] == Parametre) Valeur = Parametres[i].substr(Parametres[i].search(/=/)+1);
}//end for
return(Valeur);
}//end function
function F_Sjax(Requete,Domaine) {
if (typeof Domaine == "undefined") var Domaine = document.domain;
if (Domaine == "localhost") var Domaine = F_Ini("localhost");
if (Domaine == "Production") var Domaine = F_Ini("Production");
if (Domaine == "PreProduction") var Domaine = F_Ini("PreProduction");
var BoucleRequête = true;
//Boucle pour absorber les erreurs 500
while (BoucleRequête) {
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
xhr.open("POST","http://" + Domaine + "/Php/Ajax.php",false);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send("Requete=" + Requete);
if (xhr.responseText.indexOf("Network Error (tcp_error)") > 0) {
xhr.close;
}else{
BoucleRequête = false;
}//end if
}//end while
return(xhr.responseXML);
}//end function
function F_PageCharger(Page,Parametre) {
if (Page == null) {
parent.Page.window.location = "/Html/Blanc.html";
}else{
switch (Page.substr(0,2)) {
case "F_": F_Fonction(Page,Parametre);break;
case "FO": F_Formulaire(Page,Parametre);break;
case "ET": F_Etat(Page,Parametre);break;
case "LI": F_Liste(Page,Parametre);break;
case "PL": F_Planning(Page,Parametre);break;
case "GR": F_Graphe(Page,Parametre);break;
default : F_Script(Page,Parametre);break;
}//end switch
}//end if
}//end function |
Le fichier Ajax.php, qui permet de construire un XML à partir des résultats d'une requête SQL :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| header ('Content-type: text/xml');
include_once ($_SERVER["DOCUMENT_ROOT"]."/Classes/ClasseMappingSGBD.php");
$Requete = html_entity_decode(utf8_decode(stripslashes($_POST["Requete"])));
$Bdd = new MappingSGBD();
$Bdd->Connexion();
$Resultat = $Bdd->TableauDonnees($Requete);
//************* CREATION DU FICHIER XML
echo "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
if ($Resultat == "1") {
echo "<ResultatOk></ResultatOk>\n";
}else{
if ($Bdd->Erreur()) {
echo "<Erreur>".$Bdd->Erreur()."</Erreur>\n";
}else{
echo "<Data>\n";
foreach ($Resultat as $Enregistrement) {
echo "<Item>\n";
for($i=0 ; $i < $Enregistrement->NombreLignes() ; $i++){
$Code = $Enregistrement->GetNomChamp($i);
if ($Enregistrement->GetDonnee($Code) != null) {
$Valeur = "<![CDATA[".$Enregistrement->GetDonnee($Code)."]]>";
}else{
$Valeur = "";
}//end if
// echo "<".htmlspecialchars($Code).">".htmlspecialchars($Valeur)."</".$Code.">";
//$logger->info($Valeur);
echo "<".$Code.">".$Valeur."</".$Code.">";
}//end for
echo "</Item>\n";
}//end foreach
echo "</Data>\n";
}//end if
}//end if |
Donc quasiment toutes les requêtes SQL sont exécutées dans le code JavaScript 8O...Ce n'est pas normal non ? Qu'est-ce que vous en pensez ?