解决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 相关文章推荐
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
Dec 29 Javascript
浅析jQuery中常用的元素查找方法总结
Jul 04 Javascript
浅析Javascript使用include/require
Nov 13 Javascript
jquery 实现两Select 标签项互调示例代码
Sep 25 Javascript
arguments对象验证函数的参数是否合法
Jun 26 Javascript
jquery实现的Banner广告收缩效果代码
Sep 02 Javascript
多个js毫秒倒计时同时进行效果
Jan 05 Javascript
JavaScript实现隐藏省略文字效果的方法
Apr 27 Javascript
vue + vuex todolist的实现示例代码
Mar 09 Javascript
vue设计一个倒计时秒杀的组件详解
Apr 06 Javascript
Vue学习之常用指令实例详解
Jan 06 Javascript
浅谈JavaScript 声明提升
Sep 14 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 处理TXT文件(打开/关闭/检查/读取)
2013/05/13 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
php实现网站留言板功能
2015/11/04 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
深入浅析JavaScript中数据共享和数据传递
2016/04/25 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
2018/01/23 jQuery
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
2019/03/13 jQuery
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
python批量获取html内body内容的实例
2019/01/02 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
python_array[0][0]与array[0,0]的区别详解
2020/02/18 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
2019年Java面试必问之经典试题
2012/09/12 面试题
行政助理岗位职责
2013/11/10 职场文书
就业协议书
2014/09/12 职场文书
致运动员加油稿
2015/07/21 职场文书
高三数学教学反思
2016/02/18 职场文书
python入门学习关于for else的特殊特性讲解
2021/11/20 Python