小编典典

接收.csv文件作为ajax成功函数中的数据

ajax

请考虑以下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数据类型,因此.csv文件不是JSON格式,所以ajax函数会引发错误。但是在开发控制台中,我可以看到浏览器确实收到了一个连贯的.csv文件。因此,我知道我已经成功接收了CSV文件。我认为应该可以,但是我不确定如何正确将这个csv文件接收到我的ajax函数中?

当然,如果我可以使此URL返回正确格式的JSON字符串,那将是最好的选择,但是我不确定是否可以这样做。

这是您可以尝试使用的小提琴,您必须打开开发控制台才能看到该错误:http :
//jsfiddle.net/92uJ4/3/

任何帮助是极大的赞赏。

提姆


阅读 321

收藏
2020-07-26

共1个答案

小编典典

不幸的是,跨域限制意味着这根本行不通。该系统是专门构建的,因此您不能使用AJAX拉取任意跨域内容。没有任何形式的预解析方法可以将要获取的非JSONP数据转换为实际的JSONP数据(因为这会超出限制的要点)。

您将不得不打电话给从Yahoo!提取数据的本地服务器。并将其发送到您的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']);
        }
    })
}
2020-07-26