我以前的问题与此有关 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);
为了获得变量的值,我应该做些什么? 提前谢谢。
答案 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); });
另外,通过允许并行加载某些资源以防止阻止页面,动态加载脚本可以用来帮助加快页面加载。同样,动态加载脚本意味着您只加载您想要的脚本。需要注意的是,必须等待才能在执行任何操作之前先加载它。 ;)