请考虑此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数据(因为这会破坏的限制点)。
你将不得不采取拨打电话,以拉动来自雅虎的数据的本地服务器 并将其发送给您的AJAX请求,或者找到某种将拉动从任意URL和JSONP返回数据的服务。 碰巧,雅虎 正好提供了这样一种服务:YQL(雅虎查询语言)。 请参阅此链接了解更多详情。
为了完成你想要什么,可以使用代码在这个小提琴: 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(/<noscript[^>]*>[\S\s]*?<\/noscript>/g,'');
data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g,'');
data = data.replace(/<script.*\/>/,'');
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<s.length;i++ )
_o[HEADER[i]]=s[i];
return _o;
}()) );
});
return o;
}());
/// THE FINAL OBJECT
console.log(data);
return data;
}
});
}
$('#a').click(function() {
get_url("http://ichart.finance.yahoo.com/table.csv?a=8&b=11&e=10&g=d&c=2005&d=2&f=2016&s=YHOO");
});
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