利用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 相关文章推荐
js跳转页面方法实现汇总
Feb 11 Javascript
将中国标准时间转换成标准格式的代码
Mar 20 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
Oct 20 Javascript
浅谈javascript 迭代方法
Jan 21 Javascript
js实现图片无缝滚动特效
Mar 19 Javascript
JavaScript中三种异步上传文件方式
Mar 06 Javascript
jQuery获取cookie值及删除cookie用法实例
Apr 15 Javascript
js学习笔记之事件处理模型
Oct 31 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
Jan 04 Javascript
整理关于Bootstrap警示框的慕课笔记
Mar 29 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
Apr 20 jQuery
微信小程序商品详情页底部弹出框
Nov 22 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+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
2006/12/16 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
2017/10/23 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
2012/10/11 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
node.js中的fs.write方法使用说明
2014/12/15 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
js控制div层的叠加简单方法
2016/10/15 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
python利用hook技术破解https的实例代码
2013/03/25 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
Python装饰器语法糖
2019/01/02 Python
python对于requests的封装方法详解
2019/01/03 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
Pytorch之contiguous的用法
2019/12/31 Python
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
营销与策划应届生求职信
2013/11/04 职场文书
旅游安全协议书
2014/04/21 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
回复函范文
2015/07/14 职场文书
三八妇女节致辞
2015/07/31 职场文书
《去年的树》教学反思
2016/02/18 职场文书
Java 数据结构七大排序使用分析
2022/04/02 Java/Android