请考虑这个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/
非常感谢任何帮助。
添
答案 0 :(得分:7)
不幸的是,跨域限制意味着这不会起作用。系统是专门构建的,因此您无法使用AJAX提取任意跨域内容。没有任何类型的预解析方法可以将您获得的非JSONP数据转换为实际的JSONP数据(因为这会破坏限制点)。
您将不得不拨打从Yahoo!提取数据的本地服务器。并将其发送到您的AJAX请求,或者找到某种类型的服务,该服务将从任意URL中提取并将数据作为JSONP返回。碰巧,雅虎!提供这样的服务:YQL(Yahoo查询语言)。有关详细信息,请参阅this link。
要完成您想要的任务,请使用此小提琴中的代码: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']);
}
})
}
答案 1 :(得分:0)
修改最后提供的jsfiddle引导我进入以下解决方案:
http://jsfiddle.net/9zcsxq5a/
Route::pattern("id", "[0-9]+");
csv通过asis传递,然后被修改为json对象,类似于你在使用
时获得的那个(但没有日期限制)