【问题标题】:Google News API gives an error Uncaught SyntaxError: Unexpected token ')'Google News API 给出错误 Uncaught SyntaxError: Unexpected token ')'
【发布时间】:2019-06-22 18:01:08
【问题描述】:

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

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,这意味着响应是正确的。

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

【问题讨论】:

    标签: javascript google-api cors client-side


    【解决方案1】:

    您可以通过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 响应标头和所需的任何其他CORS 标头,然后将其传递回您的请求代码。添加了Access-Control-Allow-Origin 标头的响应是浏览器看到的,因此浏览器允许您的前端代码实际访问响应。


    至于问题中的第二个代码 sn-p,我认为它对您不起作用的原因是 https://www.google.com/finance/company_news 没有任何方法返回 JSONP。因此,formatcallback 参数似乎不会导致您想要的结果,而是会导致一些非 JSONP 响应,您的代码无法解析,因为它不是预期的格式。

    【讨论】:

    • 感谢好友的回复。您关于代理的解决方案有效。但是第二个代码 sn-p,我做了你建议的更改,但仍然无法正常工作。
    猜你喜欢
    • 2017-05-02
    • 2016-10-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 2013-11-11
    • 2014-04-07
    相关资源
    最近更新 更多