我正在使用Mootools JSONP从返回CSV文件的网址中进行读取。现在,CSV(调整关闭)中的一列具有空白,这将中止文件的读取并将错误抛出到控制台上。我有什么选择(如果有的话)读取csv数据?
我收到错误消息:
table.csv:1未捕获的语法错误:意外的标识符
还有更多其他信息:我可以看到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);
};
}
在此处添加我在GitHub上给出的答案,以供将来参考:
JSONP的想法是资源返回“带有填充的JSON”,其中JSON是JavaScript对象表示法中的值,而填充是函数调用,目的是避开同源策略。
- JSON:
{"a":"b"}
- JSONP:
myCallbackFunction({"a":"b"})
因此,基本上,期望JSONP资源返回有效的可执行JavaScript代码,然后您(或在本例中为MooTools More)提供“ myCallbackFunction”的定义。然后,资源位置将附加HTML标记
&callback=myCallbackFunction
并作为src
HTML<script>
标记注入。标签被注入到文档中,并且函数使用提供的数据进行调用,因此您可以进行处理。(如果您想知道的话,MooTools不会将函数本身称为“ myCallbackFunction”。)您从ichart.yahoo.com请求的资源返回CSV格式,我怀疑它是否支持任何回调函数填充,这意味着它可能无法以这种方式工作。
我可以看到两个选项:
- 查看Yahoo的开发人员控制台,查看该
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; } }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句