我应该将json结果放在money.js中?

时间:2015-05-29 14:08:50

标签: javascript json currency money.js

阅读文档http://openexchangerates.github.io/money.js/#fx.rates 它说您需要设置费率:

 fx.base = "USD";
fx.rates = {
    "EUR" : 0.745101, // eg. 1 USD === 0.745101 EUR
    "GBP" : 0.647710, // etc...
    "HKD" : 7.781919,
    "USD" : 1,        // always include the base rate (1:1)
    /* etc */
}

我完全得到,只有这些将是静态费率。它说要有动态速率,你需要添加json api:

// Load exchange rates data via AJAX:
    $.getJSON(
      // NB: using Open Exchange Rates here, but you can use any source!
      'http://openexchangerates.org/api/latest.json?app_id=[I hid this number]', function(data) {
        // Check money.js has finished loading:
        if (typeof fx !== "undefined" && fx.rates) {
          fx.rates = data.rates;
          fx.base = data.base;
        } else {
          // If not, apply to fxSetup global:
          var fxSetup = {
            rates: data.rates,
            base: data.base
          }
        }
      });

但是,当我这样做时,欧元汇率不会发生变化,仍为0.74。费率不会改变或调整。

在money.js脚本之前或之后,我在哪里放置json请求? 或者在money.js文件里面?如果在money.js文件里面,在底部还是顶部? - 或者请告诉我这里出错的地方

2 个答案:

答案 0 :(得分:5)

一旦money.js加载,你应该可以在任何地方重载这个(javascript允许这一般)。

没有足够的细节可以肯定地说,但我的猜测是这是一种常见的竞争条件,因为网络电话是异步的,所以如果你这样做:

-Load Money js
-Call Web call for rates
-Use money.js

当您使用money.js时,您的费率调用尚未返回,因此当您调用它时,您使用的是默认值。如果这是您的问题,您需要在实际设置费率时将代码放入回调中,如下所示:

$.getJSON(
    // NB: using Open Exchange Rates here, but you can use any source!
    'http://openexchangerates.org/api/latest.json?app_id=[I hid this number]', function(data) {
    // Check money.js has finished loading:
    if (typeof fx !== "undefined" && fx.rates) {
        fx.rates = data.rates;
        fx.base = data.base;
    } else {
        // If not, apply to fxSetup global:
        var fxSetup = {
            rates: data.rates,
            base: data.base
        }
    }
    // YOUR CODE HERE
  });

文档实际上提到了这一点:

You'll need to wait until the AJAX request has completed before you can
begin processing conversions. You may also wish to cache
proximate/historical rates on your server and bootstrap them inline
into the HTML as a backup.

答案 1 :(得分:1)

https://openexchangerates.org/documentation#example-javascript-ajax-jquery

  

JavaScript(AJAX / jQuery)

     

您可以使用AJAX请求轻松地使用JavaScript将费率加载到应用程序或网站中。我建议使用jQuery,因为它可以为你节省大量的麻烦,从统计学上讲,你可能已经在你的页面/应用程序中使用它了:

// Use jQuery.ajax to get the latest exchange rates, with JSONP:
$.ajax({
    url: 'http://openexchangerates.org/api/latest.json?app_id=YOUR_APP_ID',
    dataType: 'jsonp',
    success: function(json) {
        // Rates are in `json.rates`
        // Base currency (USD) is `json.base`
        // UNIX Timestamp when rates were collected is in `json.timestamp`

        // If you're using money.js, do this:
        fx.rates = json.rates;
        fx.base = json.base;
    }
});
  

使用JSONP是可选的 - jQuery会将一个回调参数附加到URL,并且响应将包含在函数调用中。这是为了防止访问控制(CORS)问题,并且在许多情况下会给您带来一些麻烦,但是为了安全起见,它不是最顶层的(实际上,如果安全性是您应用程序中的主要问题,您应该自己代理结果)服务器可以防止100%的XSS攻击。开放的汇率也会很快支持HTTPS。

     

成功回调是异步的 - 这意味着如果你要立即运行代码,这依赖于可用的汇率,那么这段代码应该在回调中。当AJAX请求等待时,程序的其余部分将继续执行。

强调: 如果您要立即运行代码,这取决于可用的汇率,则此代码应位于回调中