请考虑这个 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 字符串那就最好了,但我不确定我能做到这一点。
这是一个 fiddle ,您可以尝试一下,您必须打开开发控制台才能看到该错误:http://jsfiddle.net/92uJ4/3/
非常感谢任何帮助。
蒂姆
最佳答案
不幸的是,跨域限制意味着这行不通。该系统是专门构建的,因此您无法使用 AJAX 提取任意跨域内容。没有任何类型的预解析方法可以将您获取的非 JSONP 数据转换为实际的 JSONP 数据(因为这会破坏限制点)。
您必须调用本地服务器来从 Yahoo! 提取数据。并将其发送到您的 AJAX 请求,或者找到某种将从任意 URL 提取数据并以 JSONP 形式返回数据的服务。碰巧的是,雅虎!就提供了这样的服务:YQL(雅虎查询语言)。请参阅this link了解更多详情。
要完成您想要的任务,请使用此 fiddle 中的代码: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']);
}
})
}
关于jquery - 在ajax成功函数中接收.csv文件作为数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12250065/