2010-02-10 6 views
1

J'ai une question, à propos de l'analyse XML.jquery, XML vers HTML

Je veux obtenir des données XML à HTML, mais j'ai un problème, je peux obtenir ces données seulement à partir xml locale, lorsque je tente d'obtenir des données à partir de l'URL externe ne fonctionne pas, par exemple de

http://www.w3schools.com/XML/plant_catalog.xml

C'est jquery:

<script type="text/javascript"> 
     $(document).ready(function(){ 
      $.ajax({ 
       type: "GET", 
       url: "http://www.w3schools.com/XML/plant_catalog.xml", 
       dataType: "xml", 
       success: function(xml) { 
        $(xml).find('CATALOG').each(function(){ 
         var title = $(this).find('BOTANICAL').text(); 
         var url = $(this).find('BOTANICAL').text(); 
         $('<div class="items" id="link_"></div>').html('<a href="'+url+'">'+title+'</a>').appendTo('#page-wrap'); 

        }); 
       } 
      }); 
     }); 
    </script> 

et HTML:

<div id="page-wrap"> 
     <h1>Reading XML with jQuery</h1> 
    </div> 

Merci beaucoup!

Répondre

2

Vous ne pouvez pas demander des fichiers à partir de domaines différents pour des raisons de sécurité ..

citant http://api.jquery.com/jQuery.ajax/

Lorsque les données sont récupérées à partir des serveurs distants (qui n'est possible en utilisant le script ou les types de données JSONP)

+0

Cela signifie que je ne peux pas utiliser ce type d'URL, je dois utiliser quelque chose comme "url:" ../site.xml " ? – AlexC

+0

oui, seulement les URL locales à votre domaine. dans votre domaine comme url: '/somepath/somefile.xml' Les URLs relatives (commençant par /) démarrent à partir de la racine du domaine au lieu du dossier actuel –

2

Vous pouvez également utiliser un fichier local sur votre serveur comme emballage pour éviter ces problèmes de domaine croisés.

$.ajax({ 
    type: "GET", 
    url: "catalog.php", 
... 

catalog.php locale

<?php 
    header("Content-Type: text/xml"); 
    echo file_get_contents("http://www.w3schools.com/XML/plant_catalog.xml"); 
?> 

Notez que votre serveur doit avoir url fopen activé pour que cela fonctionne.