使用javascript

时间:2015-05-06 04:28:50

标签: javascript csv

我以前的问题与此有关 Read single data in csv data downloaded from url

我在这里引用的代码https://gist.github.com/henrik/265014

很抱歉,如果我再问一遍,但我得到的最后一个答案在Windows Gadget环境中不起作用。

我尝试使用这段代码将csv数据输入到我的变量中,但我得到的只是NaN。

    function getRate(from, to) {
        var script = document.createElement('script');
        script.setAttribute('src', "http://query.yahooapis.com/v1/public/yql?q=select%20rate%2Cname%20from%20csv%20where%20url%3D'http%3A%2F%2Fdownload.finance.yahoo.com%2Fd%2Fquotes%3Fs%3D"+from+to+"%253DX%26f%3Dl1n'%20and%20columns%3D'rate%2Cname'&format=json&callback=parseExchangeRate");
        document.body.appendChild(script);

      }

    function parseExchangeRate(data) {
        //var name = data.query.results.row.name;
        var rate = parseFloat(data.query.results.row.rate, 10);
        console.log("Exchange rate is " + rate);
        console.log(rate);
      }

 getRate("EUR", "USD");

来自getRate函数的url,这是输出

{"query":{"count":1,"created":"2015-05-06T04:21:02Z","lang":"en-US","results":{"row":{"rate":"1.1226","name":"EUR/USD"}}}}

我确实得到了我想要parseExchangeRate函数的值,这是速率但我无法将值解析为其他变量(在本例中为abc)。

 var abc = getRate("EUR", "USD");
 console.log(abc);

为了获得变量的值,我应该做些什么? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的问题是您要将脚本动态添加到页面中。该函数在脚本加载并运行之前立即返回(因此undefined),因此无效。该脚本以异步方式加载,而不是像浏览器解析页面时那样内联。

无论如何,这将有效:

function getRate(from, to, completed) {
    var script = document.createElement('script');
    script.setAttribute('src', "http://query.yahooapis.com/v1/public/yql?q=select%20rate%2Cname%20from%20csv%20where%20url%3D'http%3A%2F%2Fdownload.finance.yahoo.com%2Fd%2Fquotes%3Fs%3D"+from+to+"%253DX%26f%3Dl1n'%20and%20columns%3D'rate%2Cname'&format=json&callback=parseExchangeRate");
    script.onload = completed;
    document.body.appendChild(script);
}

var currentRate = 0;

function parseExchangeRate(data) {
    //var name = data.query.results.row.name;
    currentRate = parseFloat(data.query.results.row.rate, 10);
    console.log("Exchange rate is " + currentRate);
}

getRate("EUR", "USD", function(){ console.log("The rate is " +currentRate); });

另外,通过允许并行加载某些资源以防止阻止页面,动态加载脚本可以用来帮助加快页面加载。同样,动态加载脚本意味着您只加载您想要的脚本。需要注意的是,必须等待才能在执行任何操作之前先加载它。 ;)