解决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 相关文章推荐
JS代码判断IE6,IE7,IE8,IE9的函数代码
Aug 02 Javascript
JS操作HTML自定义属性的方法
Feb 10 Javascript
js实现表单Radio切换效果的方法
Aug 17 Javascript
概述jQuery的元素筛选
Nov 23 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
Jan 18 Javascript
jQuery代码优化方法总结
Jan 29 jQuery
为jquery的ajax请求添加超时timeout时间的操作方法
Sep 04 jQuery
小程序开发中如何使用async-await并封装公共异步请求的方法
Jan 20 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
May 30 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
Aug 07 Javascript
微信小程序开发之转发分享功能
Oct 22 Javascript
最新最全的手机号验证正则表达式
Feb 24 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
下拉列表多级联动dropDownList示例代码
2013/06/27 PHP
PHP生成静态HTML页面最简单方法示例
2015/04/09 PHP
php实现zip文件解压操作
2015/11/03 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
小程序:授权、登录、session_key、unionId的详解
2019/05/15 Javascript
详解在Angular4中使用ng2-baidu-map的方法
2019/06/19 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
JavaScript实现省市区三级联动
2020/02/13 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
浅析python中while循环和for循环
2019/11/19 Python
Pandas将列表(List)转换为数据框(Dataframe)
2020/04/24 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
数据库的约束含义
2012/09/09 面试题
高分子材料个人求职信范文
2013/09/25 职场文书
洗煤厂厂长岗位职责
2014/01/03 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
数学复习课教学反思
2016/02/18 职场文书
我去timi了,一起去timi是什么意思?
2022/04/13 杂记