jquery - 在ajax成功函数中接收.csv文件作为数据

标签 jquery ajax csv cross-domain jsonp

请考虑这个 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/

相关文章:

ajax - 就HTTP请求性能而言,AJAX还是Flash?

python csv writer 添加额外的引号

c# - 尝试使用 linq 查询同一文件夹中的多个文本文件

python - 从从表单生成 csv 文件的网站抓取网页 (http ://njdep. rutgers.edu/continuous/data.php)

javascript - 动态修改javascript对象

javascript - 通过 AJAX 调用在 div 中显示 JS 数组

javascript - jQuery,data()不更新数据属性

jQuery UI 选项卡 : JSON not displaying

ajax - 如何让浏览器提示保存密码?

java - GWT SimplePager - 为每个下一个和上一个添加历史记录