Récupération variable xml entre controller et vue

leoetevan
Invité n'ayant pas de compte PHPfrance

01 févr. 2011, 11:46

Bonjour,

Dans mon controller, j'ai ce code:
<?php
if ($_REQUEST['tvSelect'] != null)
{
  $tvSelect = $_REQUEST['tvSelect'];
			
  $cond = array('recursive' => 0, 'conditions'=>'Webtv.slug = "'.$tvSelect.'"', 'order' => 'Episode.id DESC', 'limit' => 12 ,'fields' => array('Episode.webtv_id', 'Episode.title', 'Episode.description', 'Episode.vignette', 'Episode.created', 'Episode.slug'));
			
  $listEpi = $this->Episode->find('all', $cond);
			
  $lien1Href = array();
  $lien1Img  = array();
  $lien2Href = array();
  $lien2Titr = array();
  $descript  = array();
  $date	   = array();
						
  foreach ($listEpi as $episode)
  { 
    $description = $this->troncature($episode['Episode']['description']);
    $webtvId = $episode['Episode']['webtv_id'];
	
    if ($webtvId == 3 || $webtvId == 4)
    {
      $lien1Href[] = '/episodes/view/'.$episode['Episode']['slug'];
      $lien1Img[]  = '/img/tv/'.$episode['Episode']['vignette'];
      $lien2Href[] = '/episodes/view/'.$episode['Episode']['slug'];
      $lien2Titr[] = $episode['Episode']['title'];
      $descript[]  = $description;
      $date[]      = $this->getDatefrcourt($episode['Episode']['created']);
    }
  }
  			
  header('Content-Type: text/xml');
  echo '<'.'?xml version="1.0" encoding="ISO-8859-1"?'.'>'."\n";
?>
  <listEpisodes>
    <lien1Href><?php echo $lien1Href; ?></lien1Href>
    <lien1Img><?php echo $lien1Img; ?></lien1Img>
    <lien2Href><?php echo $lien2Href; ?></lien2Href>
    <lien2Titr><?php echo $lien2Titr; ?></lien2Titr>
    <descript><?php echo $descript; ?></descript>
    <date><?php echo $date; ?></date>
  </listEpisodes>
<?php } ?>
Et dans ma vue, je veux récupérer le xml envoyé par le code ci-dessus.
J'utilise le code suivant:

Code : Tout sélectionner

<script type='text/javascript'> /**La fonction qui sert à envoyer vers le php */ function getListEpisodes () { /**Je récupère l'élement html <select> */ var selectElmt = document.getElementById("List"); /**Je récupère la valeur du select affin de l'envoyer au script php ci-dessus */ var valSelect = selectElmt.options[selectElmt.selectedIndex].value; /**J'utilise prototype.js */ var url = ''; var req = new Ajax.Request( url, { method: 'get', parameters: 'tvSelect='+valSelect, onSuccess: actualiserPage, onFailure: afficherErreur } ); } /**La fonction qui récupère le xml envoyé par le controller et qui me permettra d'afficher les nouveaux éléments dans ma page */ function actualiserPage(requete) { /**Je sais qu'ici il faut utiliser responseXML mais je voulais voir ce qu'il y avait dedans d'où le responseText */ var docXml = requete.responseText; alert(docXml); } </script>
Pour enfin en venir à mon problème.
Le alert(docXml) affiche bien le xml envoyer par le controller sauf qu'au lieu de n'envoyer que ça, il met à la suite tout le code de la page:
<Doctype...> et tout le reste du code html de ma page.
Je ne sais pas pourquoi je ne récupère pas juste le xml.

Si quelqu'un à une idée, elle serait la bienvenue parce que je n'en peux plus!!
Je débute tout juste avec ajax et javascript.
Merci d'avance

Eléphanteau du PHP | 10 Messages

01 févr. 2011, 15:27

salut ,

vu que je n ai pas réusi a reproduire l'erreur avec le code donné:

soit tu as un autre code interpreté dans ton "controller",

soit
si tu utilises un framework php, tu passes l'url rewriteé du js du "controller" et pas l'url en dur
du coup toute la page est regénérée.


redis nous !
++ :D

leoetevan
Invité n'ayant pas de compte PHPfrance

02 févr. 2011, 11:18

Merci pour ta réponse.

Effectivement, tu as parfaitement raison. J'utilise le framework Cakephp.
J'ai résolu mon problème hier soir. C'était en fait tout bête, mon controller faisait appel à un layout et c'est donc le code de ce layout qui s'affichait. J'ai donc créé un layout vierge et tout c'est réglé.

Merci encore