Transmission flux XML entre PHP et AJAX

Fermé
Nasspower - 2 nov. 2007 à 09:05
 pinky&thebrain - 23 juin 2010 à 17:43
Bonjour,
Je suis un nouvel utilisateur d'AJAX et j'ai le souci suivant :
Je voudrai recuperer les donnees d un fichier XML type ceci :


<?xml version="1.0"?>
<answer size="100">super
<doc id="train/location001.view0001.jpg" w="0.409906" idcollect="STOIC" fmt="JPEG" href="http://ipal-server/stoic/train/location001.view0001.jpg"></doc>
</answer>

Je sais qu on peut lire directement dans le fichier et traiter les donnees avec javascrpit, mais en fait le nom du fichier est cree par du php et je n ai aucun moyen de le recuperer, donc je ne peux pas directement acceder au fichier en JS.
Mon idee est alors de lire le fichier xml avec PHP et d'envoyer tout ca au JS avec AJAX et responseText.

Probleme : Ca marche pas. Je ne peux traiter la chaine recue comme un objet xml, js ne veut pas. d'ailleurs je n arrive meme pas a l afficher!!! Je pense que js comprend que c est du xml et que c'est pour ca.

Qqn a t il une idee???

Merci d avance!
A voir également:

6 réponses

burnedsyn Messages postés 170 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 21 février 2009 16
2 nov. 2007 à 16:38
utilise responsexml...
function ajax_xml() {
request.open('POST',"testajax.php", true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.send("&type=xml");
request.onreadystatechange = function(){ if(request.readyState == 4){
var answer = request.responseXML.documentElement;
document.write(answer.getElementsByTagName("text")[0].firstChild.length);
}
}
}

enfin c'est une piste

Tim
1
Bonjour,
Merci de ta reponse mais ca ne marche pas!!! Ou alors je n'y arrive pas!!! J'envoie par echo avec php la chaine suivante par ex :

<?xml version="1.0"?>
<answer size="100">super
<doc id="train/location001.view0001.jpg" w="0.409906" idcollect="STOIC" fmt="JPEG" href="http://ipal-server/stoic/train/location001.view0001.jpg"></d oc>
</answer>

Si je le récupère avec responseText, et que je demande de l'afficher dans une balise div par ex avec inner.html il ne le fait pas car il comprend que c'est du xml.

Si je le récupère avec responseXML et que je lui applique des fonctions dom type getElementByTagName(), rien ne se passe non plus...

J'ai essayé d'envoyer de le charger avec simpleXML_load_file sous php et de l'envoyer apres pour le récupérer avec responseXML rien n'y fait....pas cool!!!
0
burnedsyn Messages postés 170 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 21 février 2009 16
3 nov. 2007 à 09:12
<?php
$fichier = "./somedoc.xml";
// fonction de traitement des balises ouvrantes
function fonctionBaliseOuvrante($parseur, $nomBalise, $tableauAttributs)
{
// En fait... nous nous conteterons de mémoriser le nom de la balise
// afin d'en tenir compte dans la fonction "fonctionTexte"

global $derniereBaliseRencontree;
global $attribtab;
$derniereBaliseRencontree = $nomBalise;
$attribtab=$tableauAttributs;
echo("<br>voila la balsie >>");
print_r($derniereBaliseRencontree);
echo("<br>voila le tableau d'attribut c'est plus clair <br>");
print_r($attribtab);

}

// fonction de traitement des balises fermantes
function fonctionBaliseFermante($parseur, $nomBalise)
{
// On oublie la dernière balise rencontrée
global $derniereBaliseRencontree;

/* $derniereBaliseRencontree = "";

global $attribtab;

$attribtab="";*/

}

// fonction de traitement du texte
// qui est appelée par le "parseur"
function fonctionTexte($parseur, $texte)
{
global $derniereBaliseRencontree;
global $attribtab;
//echo ("test $derniereBaliseRencontree <br >");
// ATTENTION: Par défaut les noms des balises sont
// mises en majuscules
switch ($derniereBaliseRencontree) {
case "ANSWER":
echo("<br>ici on y est dans answer<br>");
echo "voici le texte de answer <b>".$texte."</b>;
break;
case "DOC":
echo("ici on y est dns doc");
echo $texte;
echo("alors ? rien au dessus tout en dessous... ben c un tableau d'attribut");
print_r($attribtab);
break;

}
}


// Création du parseur XML
$parseurXML = xml_parser_create();

xml_set_element_handler($parseurXML, "fonctionBaliseOuvrante"
, "fonctionBaliseFermante");

xml_set_character_data_handler($parseurXML, "fonctionTexte");

// Ouverture du fichier
$fp = fopen($fichier, "r");
if (!$fp) die("Impossible d'ouvrir le fichier XML");

// Lecture ligne par ligne
while ( $ligneXML = fgets($fp, 1024)) {
// Analyse de la ligne
// REM: feof($fp) retourne TRUE s'il s'agit de la dernière
// ligne du fichier.
//echo ("$ligneXML");
xml_parse($parseurXML, $ligneXML, feof($fp)) or
die("Erreur XML");





}

xml_parser_free($parseurXML);
fclose($fp);


?>

j'espère que cela peux t'aider
aussi si tu as le pouvoir de formater le xml tu peux aussi faire...
des balise pour chaque paramètres et mettre la valeur dans la balise ou dans un [!CDATAtavaleur]]
voila j'espère que cela t'aidera

Tim
0
warui010 Messages postés 3 Date d'inscription mardi 9 mars 2010 Statut Membre Dernière intervention 10 mars 2010
9 mars 2010 à 05:41
bonsoir messieurs! j'ai un problème dans le même sens mais un peu compliqué
j'ai une liste déroulante "produit" qui est liée à une bd Mysql via PHP
j'aimerai pas surcharger ma bd avec les données, et j'aimerai quand la liste affiche le nom d'un produit "X", une requette AJAX permettera de lister en bas la fiche technique du produit à partir d'un fichier XML
la liste est correctement liée à la table correspondante, le problème est au niveau du "onchange :", qui empeche le résultat de la requette JS de s'afficher en bas
merci d'avance pour votre assistance, j'en serai reconnaissant
voilà mon code

index.php

----------------------------------------
............................
<head>
<script type="text/javascript" src="responsexml.js"></script>

<title>catalogue</title>

</head>
...............................
* Cération de la requête pour avoir la liste des produits */
$sql3 = "SELECT `idpd`, `nompd`".
" FROM `produit`".
" WHERE `idtype` = ". $idr2 ."".
" ORDER BY `idpd`;";

if($connexion != false)
{
$rech_pd = mysql_query($sql3, $connexion);
/* Un petit compteur pour les départements */
$nd1 = 0;
/* On crée deux tableaux pour les numéros et les noms des produits */
$code_pd = array();
$nom_pd = array();

/* On va mettre les numéros et noms des produits dans les deux tableaux */
while($ligne_pd = mysql_fetch_assoc($rech_pd))
{
array_push($code_pd, $ligne_pd['idpd']);
array_push($nom_pd, $ligne_pd['nompd']);
$nd1++;
}
/* Maintenant on peut construire la liste déroulante */
?>
<select name="produit" id="produit" onChange="showPP('this.value')> (c'est cette ligne qui pose problème)
<option value="-1">- - - précisez produit - - -</option>
<?php
for($p = 0; $p<$nd1; $p++)
{
?>
<option value="<?php echo($code_pd[$p]); ?>"<?php echo((isset($pd_selectionne) && $pd_selectionne == $code_pd[$p])?" selected=\"selected\"":null); ?>><?php echo($nom_pd[$p]); ?></option>
<?php
}
?>
</select>
---------------------------------------------------
responsexml.js

--------------------------------------------------------------
var xmlhttp

function showPP(str)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
{
alert ("Your browser does not support AJAX!");
return;
}
var url="responsexml.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}

function stateChanged()
{
if (xmlhttp.readyState==4)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}

function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}
if (window.ActiveXObject)
{
// code for IE6, IE5
return new ActiveXObject("Microsoft.XMLHTTP");
}
return null;
}
-------------------------------------------------------
responsexml.php
------------------------------------------------
<?php
$q=$_GET["q"];

$xmlDoc = new DOMDocument();
$xmlDoc->load("pd_catalog.xml");

$x=$xmlDoc->getElementsByTagName('NOM_PRODUIT');

for ($i=0; $i<=$x->length-1; $i++)
{
//Process only element nodes
if ($x->item($i)->nodeType==1)
{
if ($x->item($i)->childNodes->item(0)->nodeValue == $q)
{
$y=($x->item($i)->parentNode);
}
}
}

$pp=($y->childNodes);

for ($i=0;$i<$pp->length;$i++)
{
//Process only element nodes
if ($pp->item($i)->nodeType==1)
{
echo("<b>" . $pp->item($i)->nodeName . ":</b> ");
echo($pp->item($i)->childNodes->item(0)->nodeValue);
echo("<br />");
}
}
?>
------------------------------------------
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
warui010 Messages postés 3 Date d'inscription mardi 9 mars 2010 Statut Membre Dernière intervention 10 mars 2010
9 mars 2010 à 20:21
répondez svp :)
0
Pour ceux qui ont eu un probleme similaire:
pensez a mettre :

<?php
header('Content-Type: text/xml');

-----------------------------------------------------------------------
<?php    
header('Content-Type: text/xml');    

//..... mettre son code qui genere XML....    
echo '    
<?xml version="1.0"?>    
<answer size="100">super    
<doc id="train/location001.view0001.jpg" w="0.409906" idcollect="STOIC" fmt="JPEG" href="http://ipal-server/stoic/train/location001.view0001.jpg"></doc>    
</answer> ' ;   
?> 

--------------------------------------------------------------------------
0