我正在使用Mootools JSONP从一个返回CSV文件的网址中读取。现在,CSV(Adj Close)中的一列有一个空格,它会中止文件的读取并将错误抛出到控制台上。如果有的话,我有哪些选择来阅读csv数据?
我收到错误:
table.csv:1未捕获的SyntaxError:意外的标识符
还有一个附加信息:我可以看到csv文件被下载到浏览器中。我不能从浏览器中阅读它吗?
var url = 'http://ichart.yahoo.com/table.csv?s=GOOG&a=0&b=1&c=2000&d=0&e=31&f=2010&g=w&ignore=.csv';
loaderJSONP(url);
loaderJSONP = function(URL) {
//Get Data
new Request.JSONP({
url: URL,
onSuccess: function(response) {
show_response(response, $('post'));
}
}).send();
show_response = function(obj, result) {
console.log(obj);
};
}
答案 0 :(得分:3)
在此处添加answer I gave on GitHub,以供将来参考:
JSONP的想法是资源返回“带填充的JSON”,其中JSON是JavaScript Object Notation中的值,Padding是函数调用,目的是绕过同源策略。
- JSON:
{"a":"b"}
- JSONP:
myCallbackFunction({"a":"b"})
基本上,JSONP资源应该返回有效的可执行JavaScript代码,而您(或者在本例中为MooTools More)提供了“myCallbackFunction”的定义。然后,资源位置附加
&callback=myCallbackFunction
并注入HTMLsrc
标记的<script>
。标签被注入到文档中,并且使用提供的数据调用该函数,因此您可以进行操作。 (如果你想知道的话,MooTools不会将函数本身称为“myCallbackFunction”。)您从ichart.yahoo.com请求的资源返回CSV格式,我怀疑它是否支持任何回调函数填充,这意味着它可能无法以这种方式工作。
我可以看到两个选项:
- 查看Yahoo's developer console,查看
yahoo.finance.historicaldata
表是否符合您的需求,或者是否有其他方法可以通过YQL获取数据。- 通过其他方式(某个服务器)获取CSV,并将其提供给您的应用程序(使用可选的预解析,因此您不必在JavaScript中解析CSV)。
醇>
回答关于选项2的后续问题,关于没有结果的原因:
您必须使用作为查询参数传递的回调值。
尝试这样的事情(未经测试):
function print_json($data) { $json = json_encode($data); if (array_key_exists('callback', $_GET) && !preg_match('/[^\w.]/', $_GET['callback'])) { header('Content-type: application/javascript; charset=utf-8'); echo $_GET['callback'], '(', $json, ')'; } else { header('Content-type: application/json; charset=utf-8'); echo $json; } }