【发布时间】:2017-03-30 22:54:40
【问题描述】:
我有一个使用 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 的服务器,我将此解决方法用作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 格式。
如果我使用“text”而不是“jsonp”,我会收到 CROS 错误 (No 'Access-Control-Allow-Origin' header is present on the requested resource.) 如果我使用 documentation 中的“jsonp text”,我仍然会收到 parsererror。如果我使用 crossDomain: true, dataType: 'text' 强制跨域但指定它是文本,我仍然会收到 CORS 错误。
我好像遇到了和this person类似的问题。
我该如何克服这个问题?我不敢相信在现代 Web 中,如果不刷新页面,就不可能从分布式服务器获取文本字符串。它看起来像一个强大的限制。事实上,我认为应该能够允许跨域的是客户端,而不是外部服务器(通常不在客户端的控制范围内)。
【问题讨论】:
-
“它看起来像一个强大的限制” 嗯,安全性很重要。 “我认为应该允许跨域的是客户端,而不是外部服务器” 再次强调,安全性很重要 :) developer.mozilla.org/en-US/docs/Web/Security/…
-
没有办法,除非外部域允许跨域请求(通过 JSONP 或 CORS)。可能的解决方法是服务器上的代理脚本获取该文件并将其传递给 AJAX 请求。
-
我同意安全性很重要,但我的抱怨是 CORS 提供的解决方案看起来不太安全(似乎有可能被恶意人员规避,更不用说服务器中的错误配置了客户端无法控制的一方)同时给开发人员带来了一些负担
标签: javascript jquery json ajax cors