解决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 相关文章推荐
javascript removeChild 使用注意事项
Apr 11 Javascript
JS实现跟随鼠标的链接文字提示框效果
Aug 06 Javascript
jQuery实现的网页竖向菜单效果代码
Aug 26 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
Oct 28 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
Jan 28 Javascript
jQuery绑定自定义事件的魔法升级版
Jun 30 Javascript
JS与jQuery实现隔行变色的方法
Sep 09 Javascript
jquery popupDialog 使用 加载jsp页面的方法
Oct 25 Javascript
js图片延迟加载(Lazyload)三种实现方式
Mar 01 Javascript
如何写好你的JavaScript【推荐】
Mar 02 Javascript
JavaScript 面向对象基础简单示例
Oct 02 Javascript
多种类型jQuery网页验证码插件代码实例
Jan 09 jQuery
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截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
php基于curl主动推送最新内容给百度收录的方法
2016/10/14 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
2017/03/14 PHP
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
js生成随机数的方法实例
2015/10/16 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
2015/12/04 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
老生常谈JavaScript中的this关键字
2016/10/01 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
Python操作MySQL模拟银行转账
2018/03/12 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
python实现QQ批量登录功能
2019/06/19 Python
python使用pip安装SciPy、SymPy、matplotlib教程
2019/11/20 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
几道数据库的概念性面试题
2014/05/30 面试题
学校安全责任书
2014/04/14 职场文书
公司联欢会策划方案
2014/05/19 职场文书
大学生优秀班干部事迹材料
2014/05/26 职场文书
员工开除通知书
2015/04/25 职场文书
2015年学校政教工作总结
2015/07/20 职场文书
2015初中教导处工作总结
2015/07/21 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
人生哲理妙语30条:淡写流年,笑过人生
2019/09/04 职场文书
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android