Могу ли я использовать PHP для захвата внешнего XML-файла для использования JQuery?

Я пытаюсь загрузить пользовательские результаты поиска XML в Google на страницу PHP, а затем манипулировать XML с помощью JQuery.

Я понимаю, что я не могу использовать javascript для захвата XML-файла, поскольку он находится во внешнем домене, но могу ли я использовать PHP для захвата XML-файла с сервера, а затем сделать его доступным для JQuery в виде XML-файла или другой структуры DOM, поэтому Затем я могу просмотреть этот XML, используя, например:

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

где resultXml — объект XML.

URL-адрес XML выглядит примерно так:

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

Где ключевое слово $ передается на страницу PHP в строке GET.

Я хорошо разбираюсь во внешнем интерфейсе, но в меньшей степени с серверной частью (поэтому я не анализирую XML в PHP), и я озадачен тем, как я могу получить XML в PHP и преобразовать его в форма, которую JQuery может анализировать (возможно, используя json_encode?). Я читал о нескольких способах включения внешнего файла в PHP с использованием таких функций, как fopen, но, похоже, есть много предостережений по поводу прокси и разрешений.

Спасибо.


person Marcus    schedule 21.12.2009    source источник


Ответы (2)


в php вы можете получить свои данные в строку в формате json, используя

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

затем назначьте его переменной javascript

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

теперь используйте jQuery, чтобы делать все, что хотите, с переменной json

person Michael Behan    schedule 21.12.2009
comment
Я использовал это, и объект json анализируется JQuery в порядке, но он не работает в IE. Я использую следующий код для проверки данных: $(gXml).find(R).each(function(){ resultUrl = $(this).find(U).text(); $(ul.results) .append(‹li›+$(this).find(T).text()+‹/li›); }); Любая причина, по которой IE это не понравится? В FF, Safari и т. д. он выводит правильные данные. Есть ли способ сохранить XML как XML? - person Marcus; 22.12.2009
comment
вы можете сохранить его в xml, если хотите, просто удалите часть json_encode, а затем вы можете проанализировать xml с помощью jQuery (достойный пример здесь: switchonthecode.com/tutorials/xml-parsing-with-jquery). Код для анализа json должен нормально работать в IE8, если он работает в других браузерах. Возможно, проверьте наличие ошибок в вашей html-разметке, если вы используете строгий тип документа xhtml и отсутствует закрывающий тег для вашего ul, например, IE8 может не отображать его. - person Michael Behan; 22.12.2009
comment
Спасибо за разъяснения. Я просмотрел свой код сто раз и не нашел ничего плохого. К счастью (когда я рвал на себе волосы), я наткнулся на эту ошибку jquery - dev.jquery.com/ticket /3143 - требует, чтобы объект был передан через конструктор, прежде чем IE6/7 распознает его как таковой. Теперь он работает отлично! Ваше здоровье. - person Marcus; 23.12.2009

Это направит вас на правильный путь:

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

Вы можете узнать больше о jQuery и XML здесь.

person Matthew Scharley    schedule 21.12.2009