Парсинг xml с использованием jquery и ajax

У меня есть RSS-канал для моего подкаста, и, по сути, я пытаюсь заполнить аудиоплеер html5 URL-адресами внутри RSS-канала.

Я считаю, что лучший способ сделать это - проанализировать ссылки с помощью ajax и затем добавить их в src аудиоплеера. Мне известна та же политика домена, которая помешала бы мне делать это с ajax, поэтому я использую междоменный плагин ajax (http://bit.ly/Jbi9iX), чтобы обойти это.

Я изо всех сил пытаюсь выяснить, почему приведенный ниже код не работает для меня, в основном на этом этапе я просто хочу добавить urlв RSS-канал в #results чтобы показать, что он работает, я добавлю его в src часть аудиоплеера.

$(document).ready(function () {
    $.ajax({
        url: 'http://theresidency.libsyn.com/rss',
        type: 'GET',
        dataType: "xml",
        success: parseXml
    });
});

function parseXml(xml) {
var item = $(xml).find("item");

  $(item).each(function() {
    $("#results").append($("enclosure").attr("url").text() + "<br />");
  });

}

Я не получаю никаких ошибок в инструментах Chrome Dev, и я просмотрел другие примеры, но я могу понять, что я делаю неправильно.

Вот пример xml / rss: http://pastebin.com/stuY495c А вот что я до сих пор загрузил: http://bit.ly/J9QHZc

Любая помощь будет высоко ценится, поэтому заранее спасибо!

2 ответа

Решение

Где именно вы передаете данные в функцию, я думаю, что вам нужно сделать:

$(document).ready(function () {
    $.ajax({
        url: 'http://theresidency.libsyn.com/rss',
        type: 'GET',
        dataType: "xml",
        success: function(data) {
           parseXml(data);
        }
    });
});

function parseXml(xml) {
var item = $(xml).find("item");

  $(item).each(function() {
    $("#results").append($("enclosure").attr("url").text() + "<br />");
  });

}

или просто:

$(document).ready(function () {
    $.ajax({
        url: 'http://theresidency.libsyn.com/rss',
        type: 'GET',
        dataType: "xml"
    }).done(function(xml) {
        $.each($("item", xml), function(i, e) {
            $("#results").append($("enclosure").attr("url").text() + "<br />");
        });
    });
});

РЕДАКТИРОВАТЬ:

Сделал еще немного возиться с этим и придумал:

$(document).ready(function () {
    $.ajax({
        url: 'http://query.yahooapis.com/v1/public/yql?q=%20SELECT%20*%20FROM%20xml%20WHERE%20url%3D%22http%3A%2F%2Ftheresidency.libsyn.com%2Frss%22&format=json&callback=',
        dataType: "json"
    }).done(function(data) {
        $.each(data.query.results.rss.channel.item, function() {
            $("#results").append(this.enclosure.url + "<br />");
        });
    });
});​

Я верю, что это то, что вы ищете, вот ДЕМОНСТРАЦИЯ

Оказывается, парсинг RSS немного сложнее, чем базовый парсинг XML. Не беспокойтесь, Google может сделать всю работу за вас и вернуть json-объект:

$(function() {
   parseRSS('http://theresidency.libsyn.com/rss');
});

function parseRSS(url) {
  $.ajax({
    url: document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent(url),
    dataType: 'json',
    success: function(data) {
      $.each(data.responseData.feed.entries, function() {
        $('#results').append(this.link + '<br />');
      })
    }
  });
}
Другие вопросы по тегам