跨域请求方式之Jsonp形式
在浏览器端才有跨域安全限制一说,而在服务器端是没有跨域安全限制的。
在两个异构系统(开发语言不同)之间达到资源共享就需要发起一个跨域请求。
而浏览器的同源策略却限制了从一个源头的文档资源或脚本资源与来自另一个源头的资源进行交互。在请求协议、端口以及域名(主机)相同时才是同一个源,否则不是同一个源,js无法访问不是同源的资源。
通过js发起跨域请求需要进行改造,或先将请求发到同源的服务器中,然后服务器内部进行转发请求,再将数据转发到前端进行展示。
通过Jsonp发起跨域请求 >>
Jsonp是json的的一种使用模式,jsonp基于js,如果没有js的环境就没有jsonp。jsonp能简单的解决跨域问题,主要是利用了js的一个“漏洞”,使用<script>标签的src属性来连接到不同源的服务器,并接收后台返回的数据。
第一种用法:
利用<script>标签src属性发起请求。
<script>
//回调函数
function test (result) {
alert(result.key);
var data = JSON.stringify(result); //json对象转成字符串
alert(data);
}
$(document).ready(function () {
$("#btn").click(function () {
//向头部输入一个脚本,该脚本发起一个跨域请求 test 用来包裹json串
<script src='http://localhost:9090/student?callback=test'></script>
});
});
</script>
在另一端服务器接收"test"参数并处理请求,返回一个jsonp格式即可形成一个跨域请求。
返回数据格式:test({"key":"value"})
以上这种写法是基本写法,需要自己写脚本发起请求,还要写个函数来处理数据,比较麻烦。
第二种用法:
通过jQuery发起Ajax请求的方式。
<script>
$(document).ready(function () {
$("#btn").click(function () {
$.ajax({
url: "http://localhost:8080/itemData",
type: "GET",
dataType: "jsonp", //指定服务器返回的数据类型
jsonp: "callback", //指定参数名称(习惯一般用callback名,不写该行默认参数名就是callback参数)
jsonpCallback: "test", //指定回调函数名称
success: function (data) { //后台返回一个json数据
alert(data.key);
}
});
});
});
</script>
后台不改变还是以上的那种,需要拼接个jsonp格式的数据即可。
设为dataType: 'jsonp', 这个$.ajax方法就和ajax XmlHttpRequest没什么关系了,取而代之的则是JSONP协议.
JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问JSONP即JSON with Padding。由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源。如果要进行跨域请求,我们可以通过使用html的script标记来进行跨域请求,并在响应中返回要执行的script代码,其中可以直接使用JSON传递javascript对象。这种跨域的通讯方式称为JSONP。
第三中用法:
通过$.getJSONP() 方法。该方法是jQuery对ajax的一种高级封装。有些$.ajax api底层的参数就被封装而不可见了。
<script>
//第一参数链接,第二个参数函数名称自定义
$.getJSONP(url,test);
</script>
跨域请求方式之Jsonp形式的更多相关文章
- js跨域请求方式 ---- JSONP原理解析
这篇文章主要介绍了js跨域请求的5中解决方式的相关资料,需要的朋友可以参考下 跨域请求数据解决方案主要有如下解决方法: 1 2 3 4 5 JSONP方式 表单POST方式 服务器代理 H ...
- 跨域请求解决方法(JSONP, CORS)
1.跨域 假设我们页面或者应用部署在 http://www.aaa.com 上了,而我们打算从 http://www.bbb.com 请求提取数据.一般情况下,如果我们直接使用 AJAX 来请求将会失 ...
- 使用jsonp进行跨域请求
使用jsonp进行跨域请求 在实际的业务中很多时候需要用到跨域请求,然而jsonp为我们提供了一种非常方便的跨域请求的方式,具体实现代码如下: $.ajax({ type:"get" ...
- Javascript跨域请求的几种解决方法
什么情况下才会出现跨域? 假设域名是:http://www.example.com.cn/ 如果所请求的域名跟这个域名不致,这种情况就是跨域,由于跨域存在漏洞,所以一般来说正常的跨域请求方式是请求不到 ...
- jquery post跨域请求数据
原先一直以为要实现跨域请求只能用jsonp,只能支持GET请求,后来了解到使用POST请求也可以实现跨域,但是需要在服务器增加Access-Control-Allow-Origin和Access-Co ...
- 【fetch跨域请求】cors
当使用fetch 发起跨域请求时,CORS(跨域资源共享Cross-origin resource sharing) 请求fetch const body = {name:"Good boy ...
- ajax本地跨域请求以及解决方法
什么是跨域? 我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景.所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源,只要没 ...
- java、ajax 跨域请求解决方案('Access-Control-Allow-Origin' header is present on the requested resource. Origin '请求源' is therefore not allowed access.)
1.情景展示 ajax调取java服务器请求报错 报错信息如下: 'Access-Control-Allow-Origin' header is present on the requested ...
- ajax跨域访问http服务--jsonp
在前面一篇文章<Spring Cloud 前后端分离后引起的跨域访问解决方案>里我们提到使用ajax跨域请求其他应用的http服务,使用的是后台增加注解@CrossOrigin或者增加Co ...
随机推荐
- Mac 访问隐藏文件方法! 网上方法在我电脑上都不可用!
百度的方法: 如果你想打开整个系统的隐藏文件可以在终端下输入以下命令 defaults write com.apple.finder AppleShowAllFiles -bool true 关闭显示 ...
- solr集群安装部署
一.安装部署zookeeper集群 zookeeper集群 二.solr集群部署 集群配置 IP | 节点名称 | 环境 --- | --- | --- 192.168.137.128 | 192.1 ...
- 配置静态服务器和配置nfs
一.配置Nginx 1.安装Nginx yum -y install nginx 2.编写配置文件 [root@ngix nginx]# cd /etc/nginx [root@ngix nginx] ...
- FreeMarker + xml 导出word
转载自:http://hongqiang.iteye.com/blog/1632998 首先介绍几种java导出word方案 1.Jacob是Java-COM Bridge的缩写,它在Java与微软的 ...
- [LeetCode] Largest Rectangle in Histogram O(n) 解法详析, Maximal Rectangle
Largest Rectangle in Histogram Given n non-negative integers representing the histogram's bar height ...
- intellj idea点击导航栏打开的一个类,怎么才能定位到类的目录
- 51nod 1486 大大走格子——dp
有一个h行w列的棋盘,里面有一些格子是不能走的,现在要求从左上角走到右下角的方案数. Input 单组测试数据. 第一行有三个整数h, w, n(1 ≤ h, w ≤ 10^5, 1 ≤ n ≤ 20 ...
- .NET中使用switch和java不一样的地方。
1.不能这样贯穿 我们知道,java 和 C在使用switch时候可以这样. switch (i) { //java中此处不使用break // 执行了case 1:对应的语句后直接 贯穿到 case ...
- 【洛谷 P4320】 道路相遇 (圆方树,LCA)
题目链接 题意:给一张无向图和\(M\)个询问,问\(u,v\)之间的路径的必经之点的个数. 对图建出圆方树,然后必经之点就是两点路径经过的原点个数,用\((dep[u]+dep[v]-dep[LCA ...
- js_!和!!的使用
js中有些特殊的数据(“” 0 null undefined NaN),请求后台返回的数据中往往都有一些这样的数据,需要对这些数据进行过滤. 过滤代码 var a = 0;//0 "&quo ...