解决ajax不能访问本地文件问题(利用js跨域原理)


Posted in Javascript onJanuary 24, 2017

博主自己在开发一个无后台,只有前台的查询系统时,遇到一个困难,如何利用Ajax读取自己的本地json文件,百度、谷歌了下,发现大部分文章都是在说修改浏览器参数,但是自己想想,用户在使用时,还要修改浏览器的参数,这样显然降低了用户体验。自己琢磨了一段时间,发现可以利用js跨域原理来解决这个瓶颈。将之前要读取的json文件,变为js对象文件,这样就可以读取这个文件,然后写一个函数来对这个js对象进行解析。

首先说明下js跨域原理和jsonp这个技术(如果说的不详细,可自行百度、谷歌)

src可以跨域请求,但是这个资源不能作为js解析,资源不是js,所以解析json的时候会出错

中间是一个对象,调用fun把这个对象传入进去,

定义的function fun可以看作是请求成功后回调函数

jsonp本质:是通过script标签跨域,来突破跨域限制请求;返回的数据中用一个函数来包装起来

jsonp是用来解决js跨域请求数据的问题,原理:是通过script标签可以跨域请求资源的原理间接的请求数据。

jsonp需要满足3个条件:

1、通过script的src请求资源

2、请求的资源中用回调函数的将数据进行包裹

3、调用方要定义回调函数

下面贴入demo来演示Ajax读取本地文件,ps:在没有服务器的情况下

解决ajax不能访问本地文件问题(利用js跨域原理)

下面是上面html页面打开效果图(为了说明成功读取本地文件)

解决ajax不能访问本地文件问题(利用js跨域原理)

贴入上面的test.html代码

<script type="text/javascript" src="js/jquery-easyui-1.3.2/jquery-1.8.0.min.js"></script> 
<script> 
  function fun(data){ 
 
 
      //var dataj=JSON.parse(data.pro); //可以将json字符串转换成json对象  
       alert(data.pro); 
      var obj = eval(data.pro);  
      //alert(obj.name); 
      //$.each(obj,function(index,position){ 
        //alert(+position['name']); 
            //html+="<option value='"+position['name']+"'>"+position["name"]+"</option>"; 
      //}); 
      for(var i=0;i<obj.length;i++){ 
         alert(obj[i].name); 
      } 
      alert(1); 
 
    } 
</script>
/*下面的代码,是之前利用ajax来读取本地json文件的代码,是不能实现的,运行时,可以不贴入下面的代码*/ 
<script type="text/javascript" src="json/abc.json"></script> 
<script> 
  $(function(){ 
    alert($); 
    /*$.ajax({ 
     type: "GET", 
     url: "json/positionMenu.json", 
     dataType: "json", 
     success:function(data){ 
         alert(data); 
      } 
    });*/ 
 
  }) 
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jQuery的一个扩展form序列化到json对象
Dec 09 Javascript
Javascript学习笔记一 之 数据类型
Dec 15 Javascript
js制作的鼠标悬浮时产生的下拉框效果
Oct 27 Javascript
jqgrid 表格数据导出实例
Nov 21 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
详解JavaScript中getFullYear()方法的使用
Jun 10 Javascript
JS控制文本域只读或可写属性的方法
Jun 24 Javascript
JQuery EasyUI的一些常用组件
Jul 12 jQuery
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
Sep 21 Javascript
详解js访问对象的属性和方法
Oct 25 Javascript
改变layer confirm弹窗按钮的颜色方法
Sep 12 Javascript
bootstrap-paginator服务器端分页使用方法详解
Feb 13 Javascript
Jquery树插件zTree实现菜单树
Jan 24 #Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
Jan 24 #Javascript
树结构之JavaScript
Jan 24 #Javascript
AngularJS实现使用路由切换视图的方法
Jan 24 #Javascript
javascript 正则表达式去空行方法
Jan 24 #Javascript
JavaScript中动态向表格添加数据
Jan 24 #Javascript
微信小程序开发的四十个技术窍门总结(推荐)
Jan 23 #Javascript
You might like
php判断表是否存在的方法
2015/06/18 PHP
php生成与读取excel文件
2016/10/14 PHP
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
jQuery统计指定子元素数量的方法
2015/03/17 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
原生javascript实现图片无缝滚动效果
2016/02/12 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
js 颜色选择插件
2017/01/23 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
Python 文件操作实现代码
2009/10/07 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
Python爬豆瓣电影实例
2018/02/23 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
解决Jupyter NoteBook输出的图表太小看不清问题
2020/04/16 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
Vivo俄罗斯官方在线商店:中国智能手机品牌
2019/10/04 全球购物
初中同学聚会邀请函
2014/02/03 职场文书
小学生竞选班干部演讲稿
2014/04/24 职场文书
2014年党员创先争优承诺书
2014/05/29 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
教师个人年度总结
2015/02/11 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
MySQL 分组查询的优化方法
2021/05/12 MySQL
工厂无线对讲系统解决方案
2022/02/18 无线电