Google News API gives an error Uncaught SyntaxError: Unexpected token ')'

Google News API gives an error Uncaught SyntaxError: Unexpected token ')'

最初我写了一些这样的代码:

var val="MSFT";
$.get('https://www.google.com/finance/company_news?q='+val+'&output=rss', 
  function (data) {
    console.log(data);
});

并且该代码在本地运行良好。但是当我试图从 GitHub 调用这个相同的函数时,它给我一个关于 CORS 的错误。

所以,我正在尝试使用以下客户端代码:

var nws_lbl = "MSFT";
var news_url = 'https://www.google.com/finance/company_news?q='+nws_lbl+'&output=rss&callback=? ';

$.ajax({
    url: news_url,
    data: {
       format: 'json'
    },
    error: function () {
        console.log("Error while getting data");
    },
    dataType: 'jsonp',
    success: function (data) {
        console.log(data);
    }
});

但是我收到以下错误:

在网络中我得到 200,这意味着响应是正确的。

总是会出错。不知道我错过了什么。有人可以帮忙吗?

您可以通过 CORS proxy 发出请求来绕过 CORS 限制,如下所示:

var val="MSFT",
    proxyUrl = 'https://cors-anywhere.herokuapp.com/',
    targetUrl = 'https://www.google.com/finance/company_news?q='+val+'&output=rss';

$.get(proxyUrl + targetUrl, 
  function (data) {
    console.log(data);
});

代理向 targetUrl 发出请求,获取响应,添加 Access-Control-Allow-Origin 响应 header 和任何其他所需的 CORS header,然后将其传回到您的请求代码。添加 Access-Control-Allow-Origin header 的响应是浏览器看到的内容,因此浏览器允许您的前端代码实际访问响应。


至于问题中的第二个代码片段,我认为它对您不起作用的原因是 https://www.google.com/finance/company_news 没有任何方法可以 return JSONP。所以 formatcallback 参数似乎没有引起你想要的结果,而是引起了一些 non-JSONP 响应,你的代码无法解析它,因为它不是预期的格式。