1

我发现这篇关于货币兑换的 SO 帖子。
我是 JSON 新手,所以我的问题是如何从这个 url 发送结果并将其获取到变量中?

http://www.google.com/ig/calculator?hl=en&q=100GBP=?EUR 
   //this url above gives back this line under
{lhs: "100 British pounds",rhs: "115.538154 Euros",error: "",icc: true} //answer html

该网址适用于浏览器,因此我尝试通过 ajax 调用发送但收到此错误。

405 (Method Not Allowed) 
Origin http://www.mysite.com is not allowed by Access-Control-Allow-Origin.

我的阿贾克斯:

var req = new Request({
    method: 'post', 
    url: 'http://www.google.com/ig/calculator?hl=en&q=100GBP=?EUR',
    onSuccess: function(response) {
        console.log(response);
    }
}).send();

我正在使用 mootools,所以请不要使用 jQuery。

4

2 回答 2

3

此处的 Google API 不会返回有效的 JSONP(响应键中缺少 "),并且它不喜欢 CORS。让您使用“编写自己的代理”或使用其他人的:

{lhs: "100 British pounds",rhs: "115.538154 Euros",error: "",icc: true} 

正确的反应是:

{"lhs": "100 British pounds", "rhs": "115.538154 Euros", "error": "","icc": true} 

这种替代方法效果很好:

Request.exchange = new Class({

    Extends: Request.JSONP,

    options: {
        url: 'http://rate-exchange.appspot.com/currency?from={from}&to={to}&q={amount}',
        amount: 1
    },

    initialize: function(options){
        this.setOptions(options);
        this.options.url = this.options.url.substitute(this.options);
        this.parent();
    }

});

new Request.exchange({
    from: 'GBP',
    to: 'JPY',
    amount: '100',
    onSuccess: function(response) {
        console.log(response, response.rate, response.v);
    }
}).send();

继承 MooTools-more 的 Request.JSONP 以添加 from/to/amount 并使用http://rate-exchange.appspot.com api 到 google,这修复了他们的 json(相同数据)。

以上在 jsfiddle 上的操作(查看控制台):http: //jsfiddle.net/bBHsW/

您还可以使用http://finance.yahoo.com/并获取 csv 等。

于 2013-07-15T15:07:09.177 回答
0

您必须创建一个与 Google API 对话的后端。然后你可以向你的后端发出ajax请求。

您不能直接在 Google API 上执行 ajax 请求。

请参阅:https ://developer.mozilla.org/en/docs/HTTP/Access_control_CORS

于 2013-07-15T14:57:17.637 回答