一、通过jsonp跨域

在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。

比如,有个a.html页面,它里面的代码需要利用ajax获取一个不同域上的json数据,假设这个json数据地址是https://api.douban.com/v2/book/search?q=javascript&count=1(豆瓣)

那么a.html中的代码就可以这样:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>JSONP实现跨域2</title>
</head>
<body><div id="mydiv"><button id="btn">点击</button></div>
</body>
<script type="text/javascript">function handleResponse(response){             //response参数为接收到的数据               console.log(response);}
</script>
<script type="text/javascript">window.onload = function() {                       var oBtn = document.getElementById('btn');oBtn.onclick = function() {     var script = document.createElement("script");                     //动态加载script     script.src = "https://api.douban.com/v2/book/search?q=javascript&count=1&callback=handleResponse";           //跨域请求 callback参数对应方法
        document.body.insertBefore(script, document.body.firstChild); };           //将script标签加入到body里     }; 

   </script> 

</html>

注:

我们看到获取数据的地址后面还有一个callback参数,按惯例是用这个参数名,但是你用其他的也一样。当然如果获取数据的jsonp地址页面不是你自己能控制的,就得按照提供数据的那一方的规定格式来操作了。

输出结果为:

二、jQuery封装JSONP

对于经常用jQuery的开发者来说,能注意到jQuery封装的$.ajax中有一个dataType属性,如果将该属性设置成dataType:"jsonp",就能实现JSONP跨域了。需要了解的一点是,虽然jQuery将JSONP封装在$.ajax中,但是其本质与$.ajax不一样。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>jQuery实现JSONP</title>
</head>
<body><div id="mydiv"><button id="btn">点击</button></div>
</body>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
<script type="text/javascript">$(function(){$("#btn").click(function(){$.ajax({async : true,url : "https://api.douban.com/v2/book/search",type : "GET",dataType : "jsonp", // 返回的数据类型,设置为JSONP方式jsonp : 'callback', //指定一个查询参数名称来覆盖默认的 jsonp 回调参数名 callbackjsonpCallback: 'handleResponse', //设置回调函数名data : {                       //拼接urlq : "javascript", count : 1}, success: function(response, status, xhr){console.log('状态为:' + status + ',状态是:' + xhr.statusText);console.log(response);}});});});
</script>
</html>

  

转载于:https://www.cnblogs.com/8080zh/p/9289364.html

跨域详解之-----Jsonp跨域相关推荐

  1. 详解SpringBoot应用跨域访问解决方案

    详解SpringBoot应用跨域访问解决方案 参考文章: (1)详解SpringBoot应用跨域访问解决方案 (2)https://www.cnblogs.com/zimug/p/11832737.h ...

  2. 【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  3. JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  4. 跨域详解!前后端分离解决跨域问题

    文章目录 一.为什么会出现跨域问题 二.什么是跨域 三.非同源限制 四.跨域问题的解决方式 Jsonp前后端配合 前端修改 后端修改 CORS 详解响应头 5. SpringBoot解决 [方式一]全 ...

  5. nginx配置详解,nginx跨域问题

    文章目录 前言 更改hosts文件 新增velocityerp.top.conf配置文件 nginx配置header参数(解决跨域),接口方配置 nginx反向代理(解决跨域),发送方配置 nginx ...

  6. FPGA基础知识极简教程(7)详解亚稳态与跨时钟域传输

    博文目录 写在前面 正文 FPGA或ASIC中的传播延迟 建立和保持时间是什么? 建立和保持时间与传播延迟和时钟频率有何关系? 如果违反建立和保持时间会发生什么? FPGA中的亚稳定是什么? 亚稳态何 ...

  7. 跨域 (1) jsonp 跨域

    jsonp 的例子 <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...

  8. 区块链研习 | 详解三大主要跨链技术,如何推动价值网络的实现

    2017年以来,区块链项目井喷状出现.截至2017年底,GitHub上的项目数超过8万,另据coinmarketcap数据显示,目前已有token种类达到1506个,总市值超过4000亿美元. 但是在 ...

  9. Lazada和Shopee选品分析之马来西亚电商市场详解-海鲸跨境

    马来西亚基础信息: 马来西亚是东南亚第三大经济体,国民富足:并且年轻人众多,对中国的产品非常喜爱. 国民经济:2019你那GDP 3543亿美元,增长4.7% 人均收入:10460美元,仅次于新加坡 ...

  10. 集线器、交换机以及路由器异同 + 冲突域和广播域详解

    转载自:https://blog.csdn.net/gui951753/article/details/79402528 冲突域和广播域 在介绍这三个设备的异同之前,我们首先需要了解冲突域和广播域的概 ...

最新文章

  1. linux网络速度不稳定,关于Linux下上网速度慢的问题
  2. js获取网页当前页面及路径
  3. 快速排序 动图_Java十大排序算法最强总结
  4. Gradle复制文件/目录方法
  5. Flume与Kafka整合案例详解
  6. python系统提供构造函数传入参数_python类变量与构造函数的使用
  7. 对PostgreSQL源代码中的build_jion_rel的理解
  8. iOS设计模式-适配器
  9. 英特尔玩VR有多认真?看看Project Alloy的细节就知道了
  10. Kali Linux 更新了1.0.9a,第一时间分享
  11. c语言上机作业五套含答案,计算机二级C语言上机题库100套(含答案)
  12. 和的区别?以及 0x0f 的含义
  13. 如何快速定位BUG?BUG定位技巧及测试人员定位的N板斧
  14. 快手架构师:3亿日活的快手微服务架构实践
  15. ArcGIS地理标记照片转点
  16. 修改chrome滚动条的样式
  17. LibreCAD+Mingw编译记录
  18. 用最通俗的语言讲一讲,什么是阻抗匹配?
  19. Java异常处理流程
  20. 小米/红米手机如何通过USB数据线把手机网络共享给电脑

热门文章

  1. 回顾 | Apache Flink 1.13 新版本 x 互娱实践分享 Meetup · 北京站精彩回顾 (附 PPT 下载)...
  2. web自动化知识点-02
  3. svm分类代码_数据挖掘入门系列教程(九)之基于sklearn的SVM使用
  4. php怎么文字加粗体代码,css怎么实现字体描边效果,html字体加粗加黑代码
  5. java窗口全屏_java如何改全屏为窗口?求啊啊啊啊
  6. c语言经典程序100例50行以上,C语言非常简单的字符统计程序50行
  7. maxvalue mysql自动分区_深入解析MySQL分区(Partition)功能
  8. mysql etc my.cnf_mysql配置文件/etc/my.cnf
  9. java mavenpom_java-使用pom-packaging Maven项目作为依赖项
  10. 10、Android--技巧