使用accounting.js的money.js的问题

时间:2014-06-01 01:06:28

标签: javascript jquery json currency money.js

我想利用money.jsaccounting.js(用于格式化货币)来更改给定价格的货币。我首先想做一个简单的例子,然后继续前进。

This article完全描述了我想要完成的内容,所以我尝试复制它的例子,但是,我在使其工作时遇到了一些困难。

我想在文章中使用openexchangerates.org(基于fixer.io)替换European Central Bank's feed中的JSON。

这是迄今为止的样子,基本上上面链接的文章包括 - http://jsfiddle.net/d6f5a/

$(document).ready(function(){
  fx.base = "EUR";
  fx.settings = {
    from : "EUR"
  };

  var amount = 9.99;
  // Load exchange rates data via the cross-domain/AJAX proxy:

  $.getJSON(
      'http://api.fixer.io/latest',
      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
              }
          }

         // now that we have exchange rates, add a few to our page
         var USD = fx.convert(amount, {to: "USD"}); //13.22784197768393
         var GBP = fx.convert(amount, {to: "GBP"}); //8.567532636985659
         var JPY = fx.convert(amount, {to: "JPY"}); //1028.1670562349989

         // use the accounting.js library to format the numbers properly
         USD = accounting.formatMoney(USD, "$ ", 2, ",", ".");
         GBP = accounting.formatMoney(GBP, "£ ", 2, ",", ".");
         JPY = accounting.formatMoney(JPY, "¥ ", 2, ",", ".");

         $("ul.currencies").append("<li>USD estimate: " + USD + "</li>");
         $("ul.currencies").append("<li>GBP estimate: " + GBP + "</li>");
         $("ul.currencies").append("<li>JPY estimate: " + JPY + "</li>");
      }
  );
});

非常感谢任何帮助或指示。

1 个答案:

答案 0 :(得分:2)

经过进一步挖掘后,我发现该问题与跨域资源共享(CORS)有关。

在某种程度上,浏览器没有加载JSON文件,因此脚本失败了。为了解决这个问题,我将JSON URL设置为http://api.fixer.io/latest?symbols=USD,GBP,JPY**&callback=?**

通过使用?callback =?或&amp; callback = ?, jQuery会向API发出JSON-P请求。

我已在此处更新了我的示例 - http://jsfiddle.net/d6f5a/3/