js怎么读取一个线上的.json文件内容?

发布于 2022-09-07 19:43:46 字数 246 浏览 10 评论 0

一个线上的.json文件链接,能否用js读取到内容?
例如http://119.23.29.40/test.json 类似这样的链接,可以直接用js读取出内容吗?
fileReader好像只能读取blob对象或者file对象的内容,那这种链接该怎么读取呢

----------更新-----------
用jquery的$.ajax()可以拿到数据,不过需要nginx上配置一些可允许跨域的参数(因为存在跨域的问题)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

幸福还没到 2022-09-14 19:43:46

解决方案如下:

1 同源可直接读取

如果http://119.23.29.40/test.json 和js文件处于相同域,可直接读取

2 不同源

(1) 是否能控制http://119.23.29.40/test.json 的返回头部? 浏览器本身有对跨域做一些限制,如果你需要跨域调用,添加如下http头部:

Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER
  1. Origin。HTTP请求头,任何涉及CORS的请求都必需携带。
  2. Access-Control-Request-Method。HTTP请求头,在带预检(Preflighted)的跨域请求中用来表示真实请求的方法。
  3. Access-Control-Request-Headers。HTTP请求头,在带预检(Preflighted)的跨域请求中用来表示真实请求的自定义Header列表。
  4. Access-Control-Allow-Origin。HTTP响应头,指定服务器端允许进行跨域资源访问的来源域。可以用通配符*表示允许任何域的JavaScript访问资源,但是在响应一个携带身份信息(Credential)的HTTP请求时,Access-Control-Allow-Origin必需指定具体的域,不能用通配符。
  5. Access-Control-Allow-Methods。HTTP响应头,指定服务器允许进行跨域资源访问的请求方法列表,一般用在响应预检请求上。
  6. Access-Control-Allow-Headers。HTTP响应头,指定服务器允许进行跨域资源访问的请求头列表,一般用在响应预检请求上。
  7. Access-Control-Max-Age。HTTP响应头,用在响应预检请求上,表示本次预检响应的有效时间。在此时间内,浏览器都可以根据此次协商结果决定是否有必要直接发送真实请求,而无需再次发送预检请求。
  8. Access-Control-Allow-Credentials。HTTP响应头,凡是浏览器请求中携带了身份信息,而响应头中没有返回Access-Control-Allow-Credentials: true的,浏览器都会忽略此次响应。

(2)不能控制,则需要自己添加代理服务器作为中转(题主所说的nginx也可以作为代理中转),添加跨域头部.

有作者已经做好的:https://www.npmjs.com/package...

总结

遇到跨域问题,涉及浏览器的同源政策限制,同源直接读取,跨域需要添加跨域头部. 不能控制,则可以添加中转服务器处理.

热血少△年 2022-09-14 19:43:46

同源直接ajax就能读

冷︶言冷语的世界 2022-09-14 19:43:46

同源的这样就能读

        $.get("http://119.23.29.40/test.json",{},function(res){
            console.info(res);
        });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文