在.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(/