【问题标题】:Read RSS XML in javascript (cross domain)在 javascript 中读取 RSS XML(跨域)
【发布时间】:2014-05-03 08:01:51
【问题描述】:

我想阅读 rss(xml) 文件,但不使用 google rss feed。
我尝试过 jsonp,但它下载文件并抛出错误 "Uncaught SyntaxError: Unexpected token

$.ajax({
        type: "GET",
        url:'https://news.google.com/?output=rss',
        //url: document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=1000&callback=?&q=' + encodeURIComponent(url),     
        dataType: "xml",
        contentType: "text/xml; charset=utf-8",
        headers: { "Access-Control-Allow-Origin":"*",},                

        success: function(xml) {
        alert("success");
        }   
});

请大家帮帮我..

【问题讨论】:

  • 你在alert('success') 之后缺少一个} 作为开始。
  • 感谢纠正..
  • 我有同样的问题知道吗?我正在使用 yahoo 新闻提要并使用 JSONP。

标签: javascript jquery ajax xml rss


【解决方案1】:

您基本上无法实现网络客户端 RSS 阅读器,因为您无法确定内容提供商会为其提要设置正确的 CORS 标头;我的建议是不要浪费时间阅读无休止的 CORS/JSONP 讲座(并尝试误导性代码),而是实施服务器解决方案(例如 Pétrolette)并继续前进。

【讨论】:

    【解决方案2】:
    $.getJSON("//ajax.googleapis.com/ajax/services/feed/load?v=1.0&callback=?", {
        num: 10,
        q: url
    }).done(function (data) {
        console.log(data);
    });
    

    注意事项:

    • 你做得过火了。不要尝试在客户端指定 服务器 实际必须提供的信息(内容类型、允许原始标头、数据类型)。
    • 您不需要 XML,您需要 JSON。
    • 跨域 JSON 请求的名称是 JSONP。
    • 如果你使用the getJSON() API method,jQuery 会为你实现。除了将 "callback=?" 添加到 URL 之外,您无需执行任何操作。
    • 使用jQuery Deferred 回调(thendonefailalways)。它们让您的代码变得很多更加灵活。
    • 也请查看文档。 https://developers.google.com/feed/v1/jsondevguide

    【讨论】:

    • 感谢您的回复。但我想在不使用 Google Feed API 的情况下获取 rss 提要。
    • 嗯,这有两种方法: A) 如果远程服务器实现 JSONP,那么您可以使用上述方法。 B) 如果远程服务器没有实现 JSONP,那么你就不走运了。没有办法绕过同源政策。
    • RSS,正如其他人所指出的,不是跨域友好的。 Goole 的 Feed API 即将停用。 RSS to API 是一个简单的应用程序,您可以托管在 Heroku 或任何提供 API 的地方,您的 JavaScript 可以查询该 API 以访问 RSS 提要。这绕过了那些讨厌的跨域限制。我为类似的用例创作了它。
    • @aspiringwebdev 这是一个误导性的陈述。 RSS 作为一种技术,在跨域方面一点也不友好。只需设置正确的 CORS 标头即可使 RSS 提要跨域友好,就像任何其他 HTTP 资源一样。 RSS 提要的内容提供者是不友好的,出于无知或懒惰。
    • @Tomalak 你是绝对正确的,是内容提供者而不是 RSS 本身经常阻止跨域请求。不过,根据我的经验,内容提供商在其 RSS 提要中使用跨域友好的 CORS 标头是不寻常的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2011-11-26
    • 2013-08-19
    • 2017-08-16
    • 1970-01-01
    • 2012-01-19
    相关资源
    最近更新 更多