通过Ajax获取CSV,避免使用CORS

时间:2016-11-16 16:28:25

标签: javascript jquery json ajax cors

我有一个使用ZingChart的页面,并通过Ajax从其他域中的多个URL加载数据。数据采用CSV文件,例如:

1, 2, 3, 4, 5

或者:

2.34,1.01,4.56

我需要的是以这种方式访问​​这些文件并为ZingChart构建JSON:

{"data":[THE_CSV_GOES_HERE], "name":"WHATEVER"}

我的第一个问题是我遇到了通常的CORS问题(我仍然不太了解它的用处),并且因为我无法控制托管CSV的服务器< / strong>,我将此解决方法用作explained here

$.ajax({
     url:"http://otherdomain/test.csv", // This is dynamically placed
     dataType: 'jsonp',
     success:function(res){
         return res;
     },
     error:function(r, error){
         alert("Error " + error);
     }      
});

这会引发parsererror,我想因为CSV不是json格式。

如果我使用&#34; text&#34;而不是&#34; jsonp&#34;我收到CROS错误(No 'Access-Control-Allow-Origin' header is present on the requested resource.)如果我使用&#34; jsonp text&#34;和documentation一样,我仍然得到parsererror。如果我使用crossDomain: true, dataType: 'text'强制执行crossDomain但指定它是文本,我仍然会收到CORS错误。

我似乎遇到了与this person类似的问题。

我怎样才能克服这一点?我无法相信在现代Web中,如果不刷新页面,就无法从分布式服务器获取一串文本。它看起来像一个强大的限制。事实上,我认为客户应该能够允许跨域,而不是外部服务器(通常在客户端的控制之外)。

2 个答案:

答案 0 :(得分:1)

您为网站的后端/托管环境使用了什么?你可以简单地访问CSV并从后端返回它们,因为从服务器端访问它们不应该有这个问题......

答案 1 :(得分:1)

您可以尝试使用概述here的服务器端请求获取csv文件,然后只需对服务器端Web方法进行ajax调用即可获取csv字符串。