2009-12-21 8 views
2

J'essaie de charger les résultats de recherche XML personnalisés de Google dans une page PHP, puis de manipuler le XML en utilisant JQuery. Je comprends que je ne peux pas utiliser javascript pour saisir le fichier XML car il est sur un domaine externe, mais puis-je utiliser PHP pour récupérer le XML du serveur, puis le mettre à la disposition de JQuery en tant que fichier XML ou autre Structure DOM, donc je peux ensuite traverser ce XML en utilisant, par exemple:Puis-je utiliser PHP pour récupérer un fichier XML externe à utiliser par JQuery?

$(resultXml).find("R").each(function(){ 
    $("ul.results").append("<li>"+$(this).find("S")+"</li>"); 
}); 

où resultXml est l'objet XML.

L'URL XML est quelque chose comme ceci:

http://www.google.com/cse?cx=XXXXXXX&client=google-xxxx&output=xml_no_dtd&q=$keyword 

Lorsque le mot-clé $ est passé à la page PHP dans la chaîne GET. Je suis bon avec les choses frontales mais moins avec le côté serveur (ce qui explique pourquoi je ne suis pas en train d'analyser le XML en PHP) et je suis perplexe quant à la façon dont j'allais m'emparer du XML en PHP et convertissant cela en un formulaire JQuery peut analyser (en utilisant json_encode peut-être?). J'ai lu sur plusieurs façons d'inclure un fichier externe en PHP en utilisant des fonctions comme fopen mais il semble y avoir beaucoup de mises en garde sur les proxies et les autorisations.

Merci.

Répondre

2

en php vous pouvez obtenir vos données dans une chaîne au format JSON en utilisant

<?php 
    $json = json_encode(file_get_contents("http://www.google.com/cse?cx=XXXXXXX&client=google-xxxx&output=xml_no_dtd&q=$keyword")); 
?> 

puis l'affecter à une variable javascript

<script>var json = <?= $json; ?></script> 

maintenant utiliser jQuery pour faire ce que vous voulez avec la variable json

+0

J'ai utilisé ceci et ai l'objet json étant analysé par le JQuery ok mais il ne fonctionne pas dans IE. J'utilise le code suivant pour examiner les données: $ (gXml) .find ("R"). Each (function() { resultUrl = $ (this) .find ("U"). Text(); $ ("ul.results"). Append ("

  • " + $ (this) .find ("T"). Text() + "
  • "); }); Une raison pour laquelle IE ne l'aimerait pas? Dans FF, Safari, etc, il imprime les données correctes. Existe-t-il un moyen de conserver le XML en XML? – Marcus

    +0

    vous pouvez le garder en XML si vous le souhaitez, il suffit de supprimer la partie json_encode et ensuite vous pouvez analyser le xml avec jQuery (exemple décent ici: http://www.switchonthecode.com/tutorials/xml-parsing-with-jquery) . Le code pour analyser le json devrait fonctionner correctement dans IE8 si cela fonctionne dans d'autres navigateurs. Peut-être vérifier les erreurs dans votre balisage html, si vous utilisez xhtml strict doctype et il manque une balise de fermeture pour votre ul par exemple IE8 pourrait choisir de ne pas l'afficher – mbehan

    +0

    Merci pour la clarification. J'ai passé mon code cent fois et je n'ai rien trouvé de mal. Heureusement (comme je me suis arraché les cheveux) je suis tombé sur ce bug jquery - http://dev.jquery.com/ticket/3143 - qui nécessite que l'objet soit passé par un constructeur avant qu'IE6/7 le reconnaisse comme tel. Maintenant, cela fonctionne parfaitement! Cheers. – Marcus

    2

    Ce va vous permettre de leur tête sur la bonne voie:

    <?php 
    echo file_get_contents("http://www.google.com/cse?cx=XXXXXXX&client=google-xxxx&output=xml_no_dtd&q=$keyword"); 
    

    Vous pouvez read more on jQuery and XML here.

    +0

    Merci pour le début Matthew! – Marcus