解决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 ajax 路由和过滤器使用说明
Aug 02 Javascript
那些年,我还在学习jquery 学习笔记
Mar 05 Javascript
javascript十六进制及二进制转化的方法
May 06 Javascript
js控制文本框输入的字符类型方法汇总
Jun 19 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
Oct 26 Javascript
动态加载JavaScript文件的两种方法
Apr 22 Javascript
微信小程序 wx.request(object) API详解及实例代码
Sep 30 Javascript
微信小程序 地图(map)实例详解
Nov 16 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
Jun 01 Javascript
JS中使用media实现响应式布局
Aug 04 Javascript
Vue动态加载异步组件的方法
Nov 21 Javascript
HTML+JS实现在线朗读器
Feb 15 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中的插件机制原理和实例
2014/07/08 PHP
PHP 图片处理
2020/09/16 PHP
任意位置显示html菜单
2007/02/01 Javascript
Jquery工作常用实例 使用AJAX使网页进行异步更新
2011/07/26 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
js css+html实现简单的日历
2016/07/14 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
浅析如何利用angular结合translate为项目实现国际化
2016/12/08 Javascript
使用原生js封装的ajax实例(兼容jsonp)
2017/10/12 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
jQuery阻止事件冒泡实例分析
2018/07/03 jQuery
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
js调用网络摄像头的方法
2020/12/05 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
python查询mysql中文乱码问题
2014/11/09 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
celery4+django2定时任务的实现代码
2018/12/23 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
大学生先进事迹材料
2014/02/16 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL