json文件_js调用本地json文件

一、问题

使用浏览器访问本地文件时,一般地址是file://开头的本地文件地址。

而访问远程文件时,一般地址是http://或者https://开头的地址,表示这个文件通过 http /https 协议访问的。

由于浏览器的同源策略保护,导致通过ajax请求本地文件时会出现跨域问题,如下所示:

 <script type="text/javascript">
      var xmlhttp = new XMLHttpRequest();
      xmlhttp.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          var myObj = JSON.parse(this.responseText);
          console.log(myObj);
        }
      };
      xmlhttp.open("GET", "./output.json", true);
      xmlhttp.send();
</script>

0f138fca4b20f3ca91fd4f2676519bac.png
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
<script type="text/javascript">
 $.get("./output.json", function (data) {
        //读进了data变量中
        //接下来用到data的代码必须全部在此函数内部进行
        console.log(data);
  })
 </script>

二、解决方法

2.1 JSONP方式

利用script/img/iframe标签的src不受同源策略影响的特性

    <script type="text/javascript">
        // 定义函数
        function getJson(data) {
          // data 就是要取的json数据
          console.log(data);
        }
    </script>
    //指定回调函数
    <script src="./nav_distribution_byMonth.json?callback=getJson"></script>

将json文件的内容作为参数放入getJson函数中

b0939d8f1a044655a83f3b709bfec352.png
nav_distribution_byMonth.json

fdf1a72f321724b8e3be7e8a550dcddd.png

2.2 运行本地Web服务器

我的电脑室Mac,自带有python,可以通过SimpleHTTPServer 模块启动服务器

⚠️mac自带是python 2.7,我安装了3.x版本,二者使用的模块不同
  • 进入文件所在目录
  • 在终端执行以下命令即可启动服务
# 如果你的 Python 版本是 3.X
python3 -m http.server

# 如果你的 Python 版本是 2.X
python -m SimpleHTTPServer
  • 默认情况下,在本地 Web 服务器上的端口 8000 上运行工作目录中的内容。可以浏览器中输入 URLhttp://localhost:8000访问此服务器
  • 此时会看到文件内容目录,点击即可查看想运行的文件。

b0f7a06426dd94c82271045ea761a8a5.png

412026ea6db0f2a249343d034ceb241b.png

a7809b45eecde671979ce463eb623697.png
json文件地址如地址栏所示

在js文件中,将json文件地址改为localhost:8000开头的地址,之后再通过这种方式打开html页面

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
<script type="text/javascript">
 $.get(
   "http://localhost:8000/learn/%E6%AF%95%E8%AE%BE%E7%9B%B8%E5%85%B3/test/output.json", 
   function (data) {
        //读进了data变量中
        //接下来用到data的代码必须全部在此函数内部进行
        console.log(data);
  })
 </script>

ab177fed04bf9c1dea0b296ea566e2dd.png
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值