【问题标题】:Get CSV via Ajax avoiding CORS [duplicate]通过 Ajax 获取 CSV 避免 CORS [重复]
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 我已经通过创建一个新的服务器端 Web 方法来解决它...这只是读取 URL 的全部内容并将其传递过去。不是最有效的解决方案,但它确实有效。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2013-09-04
    • 2013-12-25
    • 1970-01-01
    • 2021-11-23
    • 2017-06-07
    相关资源
    最近更新 更多