利用jsonp解决js读取本地json跨域的问题


Posted in Javascript onDecember 11, 2018

前言

本文主要给大家介绍了关于使用jsonp解决js读取本地json跨域的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧

一 、问题描述

通过ajax方式读取本地json文件,谷歌浏览器会提示跨域错误,导致获取不到json数据。

跨域报错.png

ajax获取json数据代码:

$.ajax({
   url: "file/employeejson.json",//json文件位置
   type: "GET",//请求方式为get
   dataType: "json", //返回数据格式为json
   success: function(data) {//请求成功完成后要执行的方法 
   console.log(data); 
   }
  })

这段代码本身没有错误,只是谷歌浏览器因为安全问题,拦截这类的访问。但是在火狐浏览器中可以访问,可以去尝试一下。

二、解决跨域问题

使用jsonp解决跨域 :(仅适用于GET请求)

实现原理:

<script> 标签是不受同源策略的限制的,它可以载入任意地方的 JavaScript 文件,而并不要求同源。

所以 JSONP 的理念就是,我和服务端约定好一个函数名,当我请求文件的时候,服务端返回一段 JavaScript。这段 JavaScript 调用了我们约定好的函数,并且将数据当做参数传入。非常巧合的一点(其实并不是),JSON 的数据格式和 JavaScript 语言里对象的格式正好相同。所以在我们约定的函数里面可以直接使用这个对象。

直接上代码:

<!DOCTYPE html> 
<html> 
 <head> 
  <meta charset="UTF-8"> 
  <title>JSON文件的调用</title> 
  <script type="text/javascript" src="jquery-1.11.2.min.js"></script>  
 </head> 
 <body> 
 </body> 
 <script>
    //回调函数
  function train (data){ 
     console.log(data);
  } 
</script>

<!--jsonp中 需要注意的是 
 <script src="file/employeejson.json?cb=train"></script> 
 src ? 之前为文件地址,? 之后为回调函数callback名称, 
回调函数可以简写为 cb , 然后 回调函数 名称要与JSON文件中的名称一致 
可以在 对应的文件名中看下,如,employeejson.json?callback=train,employeejson.json的 函数名为 train--> 
<script src="file/employeejson.json?cb=train"></script>
</html> 
 //JSON文件 
train(
 [
 {
  "name":"xx",
  "id":"ww"
  }
 ]
 )

三、注意

  • 一定要在json文件的外部用函数名+()套住;
  • js中的回调函数一定要与json中函数名相同;

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jquery调用wcf并展示出数据的方法
Jul 07 Javascript
运用jQuery定时器的原理实现banner图片切换
Oct 22 Javascript
node.js中的fs.realpathSync方法使用说明
Dec 16 Javascript
jquery遍历json对象集合详解
May 18 Javascript
Node调用Java的示例代码
Sep 20 Javascript
vue项目中axios使用详解
Feb 07 Javascript
Vue.js 踩坑记之双向绑定
May 03 Javascript
详解html-webpack-plugin插件(用法总结)
Sep 12 Javascript
深入理解react 组件类型及使用场景
Mar 07 Javascript
Vue起步(无cli)的啊教程详解
Apr 11 Javascript
微信小程序错误this.setData报错及解决过程
Sep 18 Javascript
JS如何实现基于websocket的多端桥接平台
May 14 Javascript
实现Vue的markdown文档可以在线运行的方法示例
Dec 11 #Javascript
JS中使用new Option()实现时间联动效果
Dec 10 #Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
Dec 10 #Javascript
移动端如何用下拉刷新的方式实现上拉加载
Dec 10 #Javascript
vue+Element-ui实现分页效果实例代码详解
Dec 10 #Javascript
JQuery实现ajax请求的示例和注意事项
Dec 10 #jQuery
微信小程序实现动态获取元素宽高的方法分析
Dec 10 #Javascript
You might like
在线竞拍系统的PHP实现框架(二)
2006/10/09 PHP
浅谈php+phpStorm+xdebug配置方法
2015/09/17 PHP
JavaScript中的prototype使用说明
2010/04/13 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
2014/02/26 Javascript
jQuery Ajax调用WCF服务详细教程
2015/03/31 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
javascript实现密码验证
2015/11/10 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
JS实现微信里判断页面是否被分享成功的方法
2017/06/06 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
Python显示进度条的方法
2014/09/20 Python
详解python中的装饰器
2018/07/10 Python
学习python分支结构
2019/05/17 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
python tkinter组件使用详解
2019/09/16 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
巴西最大的在线约会网站:ParPerfeito
2018/07/11 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
技术合作协议书范本
2014/04/18 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
毕业生学校组织意见
2015/06/04 职场文书
浅谈Python中的正则表达式
2021/06/28 Python
docker 制作mysql镜像并自动安装
2022/05/20 Servers