解决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字符串拼接在ie中都报错的解决方法
Mar 27 Javascript
javascript的变量、传值、传址、参数之间关系
Jul 26 Javascript
JavaScript动态生成二维码图片
Apr 20 Javascript
为什么JavaScript没有块级作用域
May 22 Javascript
浅谈JavaScript的push(),pop(),concat()方法
Jun 03 Javascript
深入分析javascript中console命令
Aug 14 Javascript
Vuex之理解Mutations的用法实例
Apr 19 Javascript
使用原生js写ajax实例(推荐)
May 31 Javascript
解决vue-router进行build无法正常显示路由页面的问题
Mar 06 Javascript
js序列化和反序列化的使用讲解
Jan 19 Javascript
微信小程序使用 vant Dialog组件的正确方式
Feb 21 Javascript
JS数组转字符串实现方法解析
Sep 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摘要生成函数(无乱码)
2012/02/04 PHP
使用PHP静态变量当缓存的方法
2013/11/13 PHP
php实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
再论Javascript的类继承
2011/03/05 Javascript
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
Jquery取得iframe下内容的方法
2013/11/18 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
在JavaScript中操作时间之getMonth()方法的使用
2015/06/10 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
JavaScript用构造函数如何获取变量的类型名
2016/12/23 Javascript
原生js轮播(仿慕课网)
2017/02/15 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
vue实现商城上货组件简易版
2017/11/27 Javascript
微信小程序实现工作时间段选择
2019/02/15 Javascript
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
node express使用HTML模板的方法示例
2019/08/22 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
Farfetch台湾官网:奢侈品牌时尚购物平台
2019/06/17 全球购物
蔻驰英国官网:COACH英国
2020/07/19 全球购物
自荐信包含哪些内容
2013/10/30 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
经理岗位职责
2015/02/02 职场文书
社区节水倡议书
2015/04/29 职场文书
网络研修随笔感言
2015/11/18 职场文书
新学期开学寄语2016
2015/12/04 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书