在.jax成功函数中接收.csv文件作为数据

请考虑这个javascript:

$.ajax({ url:'http://ichart.finance.yahoo.com/table.csv?s=GS&a=00&b=1&c=2010&d=08&e=3&f=2012&g=d&ignore=.csv', type:'get', dataType:'jsonp', success:function(data){ alert(data); } }) 

URL返回.csv文件,但我指定了jsonp数据类型,因为这是一个跨域的ajax请求。 没有该参数,我得到“不允许原点”错误。

由于我指定了jsonp数据类型,因此ajax函数会抛出错误,因为.csv文件不是JSON格式。 但是在开发控制台中我可以看到浏览器会收到一个连贯的.csv文件。 所以我知道我已成功收到CSV文件。 我认为它应该是可能的,但我不确定如何正确地将这个csv文件接收到我的ajax函数?

当然,如果我能使这个URL返回一个格式正确的JSON字符串,那将是最好的,但我不确定我能做到这一点。

这是一个小提琴,你可以尝试它,你将不得不打开开发控制台,看到这个错误: http : //jsfiddle.net/92uJ4/3/

任何帮助是极大的赞赏。

蒂姆

不幸的是,跨域限制意味着这不会起作用。 系统是专门构建的,因此您无法使用AJAX提取任意跨域内容。 没有任何类型的预解析方法可以将您获得的非JSONP数据转换为实际的JSONP数据(因为这会破坏限制点)。

您将不得不调用从Yahoo!中提取数据的本地服务器。 并将其发送到您的AJAX请求,或者找到某种类型的服务,该服务将从任意URL中提取并将数据作为JSONP返回。 碰巧,雅虎! 提供这样的服务:YQL(Yahoo查询语言)。 有关详细信息,请参阅此链接 。

要完成你想要的东西,请使用这个小提琴中的代码: http : //jsfiddle.net/c5TeM/1/

 function get_url(remote_url) { $.ajax({ url: "http://query.yahooapis.com/v1/public/yql?"+ "q=select%20*%20from%20html%20where%20url%3D%22"+ encodeURIComponent(remote_url)+ "%22&format=json", type: 'get', dataType: 'jsonp', success: function(data) { alert(data.query.results.body.p); }, error: function(jqXHR, textStatus, errorThrow){ alert(jqXHR['responseText']); } }) } 

修改最后提供的jsfiddle引导我进入以下解决方案:
http://jsfiddle.net/9zcsxq5a/

 var str_parse = function(data){ data = data.replace(/<[/]*body[^>]*>/g,''); data = data.replace(/<--[\S\s]*?-->/g,''); data = data.replace(/[\r]+/g,''); data = data.replace(/]*>[\S\s]*?<\/noscript>/g,''); data = data.replace(/]*>[\S\s]*?<\/script>/g,''); data = data.replace(//,''); return data } get_url = function(URL){ $.ajax({ url:"http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22"+ encodeURIComponent(URL)+"%22", dataType: "jsonp", type: 'get', success: function(r){ data=r.results[0]; data = str_parse(data); data = data.split(/[\n]+/); //// first line of the csv holds the colnames var HEADER = data[0].split(","); data.shift(); /// create { OBJECT } structure for each row data = (function(){ var o=[]; data.forEach(function(E){ o.push( (function(){ var _o={}; for( var i=0, s=E.split(",");i 

csv通过,asis然后被修改成为一个json对象,类似于你将在使用时获得的那个(但没有日期限制)

http://query.yahooapis.com/v1/public/yql?q=select%20%2a%20from%20yahoo.finance.historicaldata%20where%20symbol%20in%20%28%27YHOO%27%29%20and% 20startDate%20 =%20%272009-09-11%27%20于是%20endDate%20 =%20%272010-03-10%27&诊断=真ENV =商店://datatables.org/alltableswithkeys