【问题标题】:Parsing google calendar XML with JQuery使用 JQuery 解析谷歌日历 XML
【发布时间】:2012-04-02 02:01:49
【问题描述】:

我正在尝试解析这样的谷歌日历提要:

<!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 文件尝试了相同的代码,该文件有效...

【问题讨论】:

  • 会不会是xml构造不正确?我用 Chrome 打开了链接,通常 Chrome 会解析 xml 文档并正确地标记它们。这次没有……
  • 如果谷歌自己做错了,这似乎很奇怪。但谁知道呢?
  • 我将 xml 复制并粘贴到有漂亮 xml 插件的 notepad++ 中,当我要求它检查 XML 时,它说:第 2 行的 XML 解析错误:输入不正确 UTF-8,表示编码!字节:0xF6 0x72 0x73 0x61
  • 哦。好的。可能是我在日历中添加的数据有误。但我认为 google 或 firefox 会做得对... :-/
  • 好吧,它不一定是Firefox。它是谷歌或者你添加数据的方式。我还没有处理过谷歌日历 API。您还可以尝试取出该 xml 的块,再次运行您的脚本并重复取出部分以找出错误的确切位置。此错误:第 2 行的 XML 解析错误:输入不是正确的 UTF-8,表示编码!字节:0xF6 0x72 0x73 0x61 对我来说也没有多大意义。希望我能提供帮助。

标签: jquery ajax


【解决方案1】:

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

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

您有多种选择来正确获取 XML:
  • 服务器端 PHP file_get_contents() / cURL
    >>该文件现在可以由您的页面进行 AJAX 处理,因为您在同一个域中。
    >>此服务器端请求也可能是此页面的一部分,即:当页面正在加载时,PHP/Whatever 可以将其作为 JavaScript 中的变量或隐藏元素进行回显。
  • 修改的 AJAX 请求
    >>修改后的 AJAX 请求,可用于跨域请求。作为 服务器 很有用,然后将不会执行请求,这可能是您想要的。如果是这种情况,那么我应该提一下;我有一个名为 jquery.xdomainajax.js 的文件,它允许跨域 AJAX 请求。我现在正在寻找来源,但我想我会匆忙发布这篇文章,以便您可以根据需要自行搜索。

    编辑:检查this
    Edit2:经过一些简短而粗心的测试后,我无法使用上面的 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

【讨论】:

  • 嗨!非常感谢你仍然关心这个。我已经有一段时间没有使用这个了。但我开始从服务器端抓取它,它仍然有效。但我的问题是,在真正的应用程序中,我抓取了三个不同的日历,这使得页面加载变得不必要地缓慢。所以我想通过刮它客户端。但我想我最终会在主页加载后有一些 jQuery 从 php 页面获取数据......
  • 是的,在这种情况下,最好的办法可能是将页面和 AJAX 加载到 PHP 页面,如您所说,该页面将返回抓取的 XML。我很高兴你明白了:D
猜你喜欢
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
相关资源
最近更新 更多