Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过Ajax获取CSV,避免CORS_Javascript_Jquery_Json_Ajax_Cors - Fatal编程技术网

Javascript 通过Ajax获取CSV,避免CORS

Javascript 通过Ajax获取CSV,避免CORS,javascript,jquery,json,ajax,cors,Javascript,Jquery,Json,Ajax,Cors,我有一个页面,该页面使用a,并通过Ajax从其他域中的多个URL加载数据。数据位于CSV文件中,例如: 1, 2, 3, 4, 5 或: 我需要的是访问这些文件,并通过以下方式为ZingChart构建JSON: {"data":[THE_CSV_GOES_HERE], "name":"WHATEVER"} 我的第一个问题是,我遇到了常见的CORS问题(我仍然不太了解它的用途),并且由于我无法控制承载CSV的服务器,因此我将此解决方法用作: 我想这会引发一个parserror,因为CSV不是j

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

1, 2, 3, 4, 5
或:

我需要的是访问这些文件,并通过以下方式为ZingChart构建JSON:

{"data":[THE_CSV_GOES_HERE], "name":"WHATEVER"}
我的第一个问题是,我遇到了常见的CORS问题(我仍然不太了解它的用途),并且由于我无法控制承载CSV的服务器,因此我将此解决方法用作:

我想这会引发一个
parserror
,因为CSV不是json格式的

如果我使用“text”而不是“jsonp”,我会得到CROS错误(
请求的资源上不存在“Access Control Allow Origin”头。
)如果我像中一样使用“jsonp text”,我仍然会得到
解析器错误。如果我使用
crossDomain:true,dataType:'text'
强制跨域,但将其指定为text,我仍然会得到CORS错误

看来我的问题和你的一样


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

您的站点的后端/托管环境使用什么?您可以简单地访问csv并从后端返回它们,因为从服务器端访问csv时不应该出现这种问题。

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

“这看起来是一个很强的限制”嗯,安全很重要。“我认为应该是客户机能够允许跨域,而不是外部服务器”同样,安全性很重要:)除非外部域允许跨域请求(通过JSONP或CORS),否则不可能。可能的解决方法是在服务器上使用代理脚本获取该文件并将其传递给AJAX请求。我同意安全性很重要,但我的抱怨是CORS提供的解决方案看起来不太安全(似乎恶意的人可以绕过它,更不用说客户端无法控制的服务器端的错误配置了)虽然给开发人员带来了一些负担,但我已经通过创建一个新的服务器端Web方法解决了这个问题……这只是读取URL的全部内容并将其传递。这不是最有效的解决方案,但它是有效的。
{"data":[THE_CSV_GOES_HERE], "name":"WHATEVER"}
$.ajax({
     url:"http://otherdomain/test.csv", // This is dynamically placed
     dataType: 'jsonp',
     success:function(res){
         return res;
     },
     error:function(r, error){
         alert("Error " + error);
     }      
});