尝试读取csv数据时未捕获的SyntaxError

时间:2016-08-31 05:56:08

标签: javascript cross-domain jsonp mootools

我正在使用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);
  };
}

1 个答案:

答案 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并注入HTML src标记的<script>。标签被注入到文档中,并且使用提供的数据调用该函数,因此您可以进行操作。 (如果你想知道的话,MooTools不会将函数本身称为“myCallbackFunction”。)

     

您从ichart.yahoo.com请求的资源返回CSV格式,我怀疑它是否支持任何回调函数填充,这意味着它可能无法以这种方式工作。

     

我可以看到两个选项:

     
      
  1. 查看Yahoo's developer console,查看yahoo.finance.historicaldata表是否符合您的需求,或者是否有其他方法可以通过YQL获取数据。
  2.   
  3. 通过其他方式(某个服务器)获取CSV,并将其提供给您的应用程序(使用可选的预解析,因此您不必在JavaScript中解析CSV)。
  4.   

回答关于选项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;
    }
}