如何使用Javascript从外部URL获取CSV文件

时间:2015-07-16 17:57:48

标签: javascript jquery ajax csv xmlhttprequest

我正在尝试从以下网址(http://s3.amazonaws.com/misc-ww/data.csv)获取CSV文件,并动态解析此文件中的数据。我想通过解析文件中的数据来实现的目标非常重要,如果您想对其提出建议,请随时查看该文件; 但是我当前的问题在于获取文件本身的数据。使用XMLHttpRequest,Ajax调用或JSONP调用时;响应始终返回错误。意味着由于某种原因无法访问该文件。

经过几个小时的研究,我确信这与某种安全限制(跨域请求)有关,遗憾的是我还没有更接近理解如何绕过它。出于示例目的,我创建了一个jsFiddle突出显示我尝试通过AJAX JSONP调用检索CSV文件(代码如下所示)。

HTML

<button>Click me to get the CSV File</button>

的Javascript

function getCSV() {
    $.ajax({
        url: "http://s3.amazonaws.com/misc-ww/data.csv",
        type: 'get',
        dataType: 'jsonp',
        success: function(data) {
            alert("Success: " + data);
        },
        error: function(jqXHR, textStatus, errorThrow){
            alert("Error: " + jqXHR['responseText']);
        }
    });
}

$(&#39; button&#39;)。click(function(){     getCSV(); });

我的主要目标是能够通过Javascript单独实现这一点,但我欢迎任何涉及jQuery的答案。我知道javascript框架可以让它适用于我,但在我的情况下,我需要没有它们的代码。

1 个答案:

答案 0 :(得分:1)

如果服务器不支持,您无法通过JSONP调用绕过CORS。更多的是服务器不必设置&#34; Access-Control-Allow-Origin:*&#34;头。相反,服务器可以在回调函数内发送响应以绕过直接的JSON响应。所以你的问题是你的.csv文件没有包含在回调函数中。

所以支持JSONP的服务器得到了?callback = cbFunc它将打印:

cbFunc('here is my file content')

现在你问.csv文件和服务器正在发送它而不将其包装回回调函数。这就是为什么你最终会受到安全限制的原因。

长话短说:您无法通过AJAX JSONP获取文件,因为 s3.amazonaws.com不支持JSONP

这里有关于JSON和JSONP的很好的解释:http://json-jsonp-tutorial.craic.com/index.html

抱歉重复自己。