利用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 相关文章推荐
Javascript的数组与字典用法与遍历对象的属性技巧
Nov 07 Javascript
JavaScript事件处理器中的event参数使用介绍
May 24 Javascript
三种取消选中单选框radio的方法
Sep 09 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
Apr 07 Javascript
JavaScript 节流函数 Throttle 详解
Jul 04 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
Nov 05 Javascript
js时间戳格式化成日期格式的多种方法介绍
Feb 16 Javascript
JS实现的简单四则运算计算器功能示例
Sep 27 Javascript
JS正则表达式完美实现身份证校验功能
Oct 18 Javascript
详解jQuery中的getAll()和cleanData()
Apr 15 jQuery
原生js实现随机点名功能
Nov 05 Javascript
JavaScript实现前端倒计时效果
Feb 09 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网页游戏学习之Xnova(ogame)源码解读(七)
2014/06/23 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
列表内容的选择
2006/06/30 Javascript
修改发贴的编辑功能
2007/03/07 Javascript
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
jquery 实现表单验证功能代码(简洁)
2012/07/03 Javascript
JQuery包裹DOM节点的方法
2015/06/11 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
使用D3.js制作图表详解
2017/08/13 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
webpack4 optimization使用总结
2019/11/10 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
python连接oracle数据库实例
2014/10/17 Python
详解Django中的过滤器
2015/07/16 Python
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
使用requests库制作Python爬虫
2018/03/25 Python
Python生成器的使用方法和示例代码
2019/03/04 Python
简单了解python装饰器原理及使用方法
2019/12/18 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
如何定义一个可复用的服务
2014/09/30 面试题
应届毕业生求职自荐书
2014/01/03 职场文书
电子信息科学专业自荐信
2014/01/30 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏