使用JQuery解析谷歌日历XML

时间:2012-03-16 14:08:08

标签: jquery ajax

我正在尝试解析像这样的Google日历Feed:

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>

<p id="entries"></p>

<script>

$(document).ready(function(){
        $.ajax({
              url: 'http://www.google.com/calendar/feeds/339if8qgnu8pic5a2ru4moe5m0%40group.calendar.google.com/public/full',
              dataType: 'xml',
              success: parseXML
        });
        function parseXML(xml){
              $(xml).find('entry').each( function() {
                    $('#entries').append($(this).find('title').text() + '<br />')
              });
        }
});
</script>

</body>
</html>

但它找不到任何元素。我究竟做错了什么?用简单的XML文件尝试了相同的代码......

1 个答案:

答案 0 :(得分:1)

当我自己测试时,它似乎找不到任何元素,因为请求没有返回任何数据。由于关于无效编码的评论,我当然认为我遗漏了一些内容......但是,我下载了 XML文档并将其保存在您提供的HTML文件旁边,进行了以下更改:

url: 'full.xml',
完成此操作后,(对我而言)段落元素现在填充了可以在您定位的XML中看到的两个条目。当然这是因为跨域策略和什么不是?

你有多种方法可以正确地获取XML:

  • 服务器端PHP file_get_contents()/ cURL
    &gt;&gt;该文件现在可以由您的网页进行AJAX,因为您位于同一个域中。
    &gt;&gt;此服务器端请求也可以是此页面的一部分,即:当加载页面时,PHP / Whatever可以将其作为JavaScript中的变量或隐藏元素回显。<登记/>
  • 修改后的AJAX请求
    &gt;&gt;修改后的AJAX请求,适用于跨域请求。有用的服务器然后将不会执行请求,这可能是你想要的。如果是这种情况,那么我应该提一下;我有一个名为jquery.xdomainajax.js的文件,它允许跨域AJAX请求。我现在正在寻找消息来源,但我想我会赶紧发布这篇文章,以便你可以自己搜索一下。

    编辑:检查this
    编辑2:经过一些简短而粗心的测试后,我无法使用上面的jQuery变通方法插件工作......所以我的解决方案是将其刮到服务器端。

    以下是一些链接:

  • How to load a certain div of an external webpage on another webpage that is on a different domain
  • Get Websites Title
  • JQuery ajax cross domain call and permission issue

周一:我使用的是FireFox 12.0