在JQuery中使用CORS来获取RSS文件

时间:2016-12-10 07:18:28

标签: javascript jquery xml cors

我可能做错了......我觉得我对代码很不满......

我从这开始:

function getData(){
//getting XML data
  $.get('http://rss.cnn.com/rss/edition.rss', function(d){
    //need to capture the data to process the data.
    //we are representing the data with the letter d
    console.log(d); //this method is good to see the structure of the data if you don't know it already
     $(d).find('item').each( function(){
        //find each item and do the following:
        var article = $(this);
        var title = article.find('title').text();
        var description = article.find('description').text();
        var guid = article.find('guid').text();
        var date = article.find('pubDate').text();
        var theText = '<article><h3><a href="'+guid+'">'+title+'</a></h3><p>Published on:'+date+'</p><p>'+description+'</p>';
        $('#content').append(theText);
       }); //end each
     }) //end anon func
  }//end getData();
getData();

我得到以下内容:No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上。

好的......所以我在网上看了一遍。我找到了Chrome的扩展程序,如果启用它可以让它工作 - 但这不会帮助我建立一个实时网站。在网上查找有关CORS的信息,我不懂文档。我得到的印象是我必须传递标题信息,但我不知道在哪里或如何。

我找到了并试了一下:

$.ajax({
   type: "GET",
   headers: {"Access-Control-Allow-Origin": "http://rss.cnn.com",
   "Access-Control-Allow-Headers":"content-type"            },
   url: "http://rss.cnn.com/rss/edition.rss"
  }).done(function (data) {
    console.log(data);
    });

以下是我现在收到的错误消息: 对预检请求的响应没有通过访问控制检查:否&#39;访问控制 - 允许 - 来源&#39;标头出现在请求的资源上。

对我来说这可能看起来很愚蠢,但是我想要获取数据的rss feed所请求的资源是什么?或者是我的文件。我已经读了这么多,我的头和眼睛都在混乱中旋转。请帮忙!

由于

2 个答案:

答案 0 :(得分:1)

var requestOptions: RequestInit = {
    method: 'GET',
    redirect: 'follow'
  };
  const CORS_PROXY = "https://cors-anywhere.herokuapp.com/"
  
  fetch(CORS_PROXY + "http://fetchrss.com/rss/5f56c6803c140278522985135f56c72f61579219a908f6e2.json", requestOptions)
    .then(response => response.json())
    .then(result => console.log(result))
    .catch(error => console.log('error', error));

四年后更新,因此如果上下文无关,请随时删除。尝试添加对我有用的CORS_PROXY位。我在rss-parse npm模块文档https://www.npmjs.com/package/rss-parser

中找到了修复程序

答案 1 :(得分:0)

您要求的资源(rss文件)位于CNN的服务器中。但是,他们不允许您从浏览器访问。这就是您收到CORS错误的原因。有不同的方法来克服这个问题,比如使用JSONP。但是,CNN仍然必须在其服务器中启用jsonp。

您唯一能做的就是在服务器端启用Access-Control-Allow-Origin,然后请求。