我正在尝试从以下网址(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框架可以让它适用于我,但在我的情况下,我需要没有它们的代码。
答案 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
抱歉重复自己。