Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Application Web : XUL, AJAX, PHP

Envoyé par : Inarius

Date : 28/10/2009 14:57

Bonjour à tous, Alors voila je suis en train de réaliser une application web, mais n'étant pas expert dans le domaine et surtout débutant, je demande votre aide.

Donc pour les technologies qui seront utilisés pour cette application, il y aura :

  • PHP du coté du serveur (j'y ai déjà quelques connaissances)
  • MySQL pour la sauvegarde des données
  • AJAX pour la communication entre le client et le serveur (j'y ai également quelques connaissances sans être très avancé)
  • XML pour la transmission des données (c'est surtout la où j'ai des problêmes)
  • XUL pour l'interface utilisateur

Donc pour l'instant j'ai un problême au niveau de la transmission des données entre le serveur et le client. Je génère donc un fichier XML dynamiquement grâce à simpleXML que je renvoit au client avec AJAX. Je le traite ensuite avec Javascript mais c'est la que ca ne marche pas. Il me dit que xhr.responseXML est 'null'.

Voila une partie des codes sources :

coté serveur / PHP:

$reponse = mysql_query("SELECT * FROM acheteur ORDER BY numAcheteur");
$xml = new SimpleXMLElement('<vente/>');
while ($donnee = mysql_fetch_array($reponse)) {
$noeud = $xml->addChild('acheteur');
$noeud->addChild('numAcheteur', $donnee['numAcheteur']);
$noeud->addChild('nom', $donnee['nom']);
$noeud->addChild('prenom', $donnee['prenom']);
$noeud->addChild('adresse', $donnee['adresse']);
$noeud->addChild('codePostal', $donnee['codePostal']);
$noeud->addChild('ville', $donnee['ville']);
$noeud->addChild('facture', $donnee['facture']);
}
header("Content-type: application/xml");
echo $xml->asXML(); 

coté client / AJAX :

var xhr = null; 
function afficherAcheteur() {
if (xhr && xhr.readyState != 0) {
xhr.abort();
}
xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
var tableau = xml2table(xhr.responseXML);
}
};
xhr.open("POST", "fichier/page/acheteur.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("action=afficher");
}
function xml2table(xml) {
var i =0;
var facture = '';
var table = '';
table += '<html:table id="tableauAcheteur">';
table += '<html:thead id="headTableuAcheteur">';
table += '<html:tr id="ligneHeadTableauAcheteur">';
table += '<html:td id="numAcheteurHeadTableauAcheteur">Numéro de   l\'acheteur</html:td>';
table += '<html:td id="nomHeadTableauAcheteur">Nom</html:td>';
table += '<html:td id="prenomHeadTableauAcheteur">Prénom</html:td>';
table += '<html:td id="adresseHeadTableauAcheteur">Adresse</html:td>';
table += '<html:td id="codePostalHeadTableauAcheteur">Code postal</html:td>';
table += '<html:td id="villeHeadTableauAcheteur">Ville</html:td>';
table += '<html:td id=factureHeadTableauAcheteur">Facture</html:td>';
table += '</html:tr>';
table += '</html:thead>';
table += '<html:tbody id="bodyTableauAcheteur>';
while (numAcheteurs[i] != undefined) {
(xml.selectNodes("/vente/acheteur[" + i + "]/nom") == 0) ? facture = 'non' :  facture = 'oui';
table += '<html:tr id="ligneBodyTableauAcheteur">';
table += '<html:td id="numAcheteurBodyTableauAcheteur>' +  xml.selectNodes("/vente/acheteur[" + i + "]/numAcheteur") + '</html:td>';
table += '<html:td id="nomBodyTableauAcheteur">' + xml.selectNodes("/vente/acheteur[" + i + "]/nom") + '</html:td>';
table += '<html:td id="prenomBodyTableauAcheteur">' + xml.selectNodes("/vente/acheteur[" + i + "]/prenom") + '</html:td>';
table += '<html:td id="adresseBodyTableauAcheteur">' + xml.selectNodes("/vente/acheteur[" + i + "]/adresse") + '</html:td>';
table += '<html:td id="codePostalBodyTableauAcheteur">' + xml.selectNodes("/vente/acheteur[" + i + "]/codePostal") + '</html:td>';
table += '<html:td id="villeBodyTableauAcheteur">' + xml.selectNodes("/vente/acheteur[" + i + "]/ville") + '</html:td>';
table += '<html:td id="factureBodyTableauAcheteur">' + facture + '</html:td>';
table += '</html:tr>';
}
table += '</html:tbody>';
table += '</html:table>';
return table;
} 

Comme pour l'instant, c'est la transmission qui me pose problème, je n'ai pas encore coder la partie qui affichera ce tableau dans l'interface utilisateur.

merci d'avance Inarius

# Re: Application Web : XUL, AJAX, PHP

Envoyé par : Grubshka

Date : 29/10/2009 13:55

Salut,

Essaies avec "text/xml" comme type MIME dans le header de la réponse.

# Re: Application Web : XUL, AJAX, PHP

Envoyé par : Inarius

Date : 29/10/2009 19:35

ok merci :) Mais j'ai changer de solution en fait xD

Maintenant le fichier XML est enregistrer sur le serveur toutes les x secondes. Et quand j'en ai besoin, je récupère ce fichier avec AJAX, c'est plus rapide parce que plus besoin de régénérer ce fichier XML à chaque fois et comme ca, tout programme en autre langage de programmation peut toujours récupérer ce fichier. C'est plus facile que de se connecter à la BDD à chaque fois.

Mais maintenant j'ai un autre grooos problème: comment transformer ce document XML en arbre XUL. J'ai déjà vu plusieurs solution comme générer un arbre XUL avec javascript a partir du XML mais je sais pas comment intégrer ce tableau sans recharger la page par la suite. Ensuite le RDF "ca m'intéresse pas" car je voudrais rester sur du XML qui peut être utiliser par de multiple langage (je pense au JAVA en fait). Et enfin la je suis en train d'essayer d'utiliser 'nsITreeView' mais c'est assez chaud et je sais pas pourquoi ca marche.

Voila mon code pour nsITreeView :

var tableauAcheteur = {
   rowCount : function() { return  getXmlAcheteur().getElementsByTagName('numAcheteur').length; },
   getCellText : function(row,column) {
       if (column == 'Numéro de l\'acheteur')
           return getXmlAcheteur().getElementsByTagName('numAcheteur')[row].firstChild.nodeValue;
       else if (column == 'Nom')
           return getXmlAcheteur().getElementsByTagName('nom')[row].firstChild.nodeValue;
       else if (column == 'Prénom')
           return getXmlAcheteur().getElementsByTagName('prenom')[row].firstChild.nodeValue;
       else if (column == 'Adresse')
           return getXmlAcheteur().getElementsByTagName('adresse')[row].firstChild.nodeValue;
       else if (column == 'Code postal')
           return getXmlAcheteur().getElementsByTagName('codePostal')[row].firstChild.nodeValue;
       else if (column == 'Ville')
           return getXmlAcheteur().getElementsByTagName('ville')[row].firstChild.nodeValue;
       else if (column == 'Facture (oui/non)') {
           if (getXmlAcheteur().getElementsByTagName('facture')[row].firstChild.nodeValue == 0)
               return 'non';
           else
               return 'oui';
       } else
           return '';
   },
   setTree: function(treebox){ this.treebox = treebox; },
   isContainer: function(row){ return false; },
   isSeparator: function(row){ return false; },
   isSorted: function(row){ return false; },
   getLevel: function(row){ return 0; },
   getImageSrc: function(row,col){ return null; },
   getRowProperties: function(row,props){},
   getCellProperties: function(row,col,props){},
   getColumnProperties: function(colid,col,props){}
};

et voici un exemple d'un fichier XML:

<?xml version="1.0" encoding="UTF-8"?>
<vente>
   <acheteur>
       <numAcheteur>1</numAcheteur>
       <nom>dgd</nom>
       <prenom>sg</prenom>
       <adresse>sddg</adresse>
       <codePostal>231</codePostal>
       <ville>sg</ville>
       <facture>1</facture>
   </acheteur>
   <acheteur>
       <numAcheteur>2</numAcheteur>
       <nom>ddg</nom>
       <prenom>sg</prenom>
       <adresse>srg</adresse>
       <codePostal>65</codePostal>
       <ville>sdff</ville>
       <facture>0</facture>
   </acheteur>
   <acheteur>
       <numAcheteur>3</numAcheteur>
       <nom>dgd</nom>
       <prenom>sg</prenom>
       <adresse>sddg</adresse>
       <codePostal>231</codePostal>
       <ville>sg</ville>
       <facture>1</facture>
   </acheteur>
</vente>

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.