解决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实现以post打开新窗口
Mar 19 Javascript
jquery 实现返回顶部功能
Nov 17 Javascript
简介alert()与console.log()的不同
Aug 26 Javascript
基于JavaScript实现回到页面顶部动画代码
May 24 Javascript
jQuery仿写百度百科的目录树
Jan 03 Javascript
react-native ListView下拉刷新上拉加载实现代码
Aug 03 Javascript
深入理解ES6的迭代器与生成器
Aug 19 Javascript
浅谈mvvm-simple双向绑定简单实现
Apr 18 Javascript
vue+Element-ui实现分页效果实例代码详解
Dec 10 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
Mar 29 Javascript
基于Express框架使用POST传递Form数据
Aug 10 Javascript
vue项目打包后请求地址错误/打包后跨域操作
Nov 04 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 Socket 编程
2010/04/09 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
javascript实现上传图片前的预览(TX的面试题)
2007/08/20 Javascript
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
Js获取当前日期时间及格式化代码
2016/09/17 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
vue基于mint-ui实现城市选择三级联动
2020/06/30 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
python面试题Python2.x和Python3.x的区别
2019/05/28 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
什么是python的id函数
2020/06/11 Python
详解python datetime模块
2020/08/17 Python
python实现计算器简易版
2020/12/17 Python
HTML5获取当前地理位置并在百度地图上展示的实例
2020/07/10 HTML / CSS
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
幼师自我鉴定范文
2013/10/01 职场文书
法学专业自我鉴定
2014/02/05 职场文书
社区文艺活动方案
2014/08/19 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书