解决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 attachEvent和addEventListener使用方法
Mar 19 Javascript
jquery 模拟雅虎首页的点击对话框效果
Apr 11 Javascript
jquery常用操作小结
Jul 21 Javascript
JS模式之单例模式基本用法
Jun 30 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
Jan 27 Javascript
使用bootstrap3开发响应式网站
May 12 Javascript
微信小程序(六):列表上拉加载下拉刷新示例
Jan 13 Javascript
深入理解Vue transition源码分析
Jul 30 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
Aug 28 Javascript
Javascript原型链及instanceof原理详解
May 25 Javascript
js实现轮播图效果 纯js实现图片自动切换
Aug 09 Javascript
vue-simple-uploader上传成功之后的response获取代码
Sep 07 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
农民C键的运用技巧
2020/03/04 星际争霸
php下实现折线图效果的代码
2007/04/28 PHP
Php Ctemplate引擎开发相关内容
2012/03/03 PHP
php格式化金额函数分享
2015/02/02 PHP
php判断一个数组是否为有序的方法
2015/03/27 PHP
PHP和C#可共用的可逆加密算法详解
2015/10/26 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
php通过smtp邮件验证登陆的方法
2016/05/11 PHP
PDO::errorInfo讲解
2019/01/28 PHP
学习并汇集javascript匿名函数
2010/11/25 Javascript
读jQuery之三(构建选择器)
2011/06/11 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
2013/12/08 Javascript
javascript跨浏览器的属性判断方法
2014/03/16 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
vue中利用Promise封装jsonp并调取数据
2019/06/18 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
使用cx_freeze把python打包exe示例
2014/01/24 Python
Python上传package到Pypi(代码简单)
2016/02/06 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
在python中做正态性检验示例
2019/12/09 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
事业单位个人应聘自荐信
2013/09/21 职场文书
求职简历的自我评价怎样写好
2013/10/07 职场文书
实习生单位鉴定意见
2013/12/04 职场文书
绩效工资实施方案
2014/03/15 职场文书
2015年党员个人工作总结
2015/05/13 职场文书
2016年基层党支部书记公开承诺书
2016/03/25 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
剑指Offer之Java算法习题精讲二叉树的构造和遍历
2022/03/21 Java/Android