jsonp跨域原理解析

前言: 跨域请求是前台开发中经常遇到的场景,但是由于浏览器同源策略,导致A域下普通的http请求没法加载B域下的数据,跨域问题由此产生。但是通过script标签的方式却可以加载非同域下的js,因此可以利用这一特性,进行跨域数据请求。

先看一下跨域导致的问题,测试域分别为 localhost 和 www.icity366.com, 下文分别对应A域和B域,测试文件为A域下的 data.jsp, 我们在A(localhost)域下请求B(www.icity366.com)域下的数据,看一下data.jsp中关键代码:

    $.ajax({
		url : "http://www.icity366.com:8080/addresslist/test/Data.do?method=getData",
		data : {callback : "getData"},
		//dataType : "json",
		type : "get",
		success : function(data){
			alert(data);
		},
		error : function(XmlHttpRequest,textStatus,errorThrown){
			//debugger;
			alert(textStatus);
		}
	  })

 结果为alert("error"),浏览器提示跨域:

  

利用script标签解决跨域

在data.jsp页面中定义好回调方法,

function getData(data){
  alert(data.name);
}

通过script标签引用js:

<script type="text/javascript" src="http://www.icity366.com:8080/addresslist/test/Data.do?method=getData&callback=getData"></script>

服务器端java代码如下:

String callback = request.getParameter("callback");
Map<String,String> data = new HashMap<String,String>();
data.put("name", "Liyx");
data.put("age", "25");
String dataJson = JsonUtils.convertToString(data);//Map->json
response.getWriter().write(callback+"("+dataJson+")");

 请求结果:

java端返回  getData({"age":"25","name":"Liyx"}),页面执行getData(),弹出 Liyx, 说明<script>标签可跨域获得数据。

 JSONP方式跨域写法

  json核心就是:允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。先看一下写法:

var url = "http://www.icity366.com:8080/addresslist/test/Data.do?method=getData&callback=?";
	$.getJSON(url,function(data){
		alert(data.name);  //Liyx
	})

  callback=? 先传递?过去,jquery会自动生成一个全局函数来替换callback=?中的问号,看一下java端的输出,

jQuery171004718876606784761_1411549835461({"age":"25","name":"Liyx"}),长串即为生成的全局函数,该function会自动销毁,并把数据传递到回调方法中。

时间: 2024-10-27 12:27:57

jsonp跨域原理解析的相关文章

jsonp 跨域原理详解

JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略).这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容. JavaScript这个安全策略在进行多iframe或多窗口编程.以及Ajax编程时显得尤为重要.根据这个策略,在baidu.com下的页面中包含的JavaScript代码,不能访问在

深入剖析jsonp跨域原理

在项目中遇到一个jsonp跨域的问题,于是仔细的研究了一番jsonp跨域的原理.搞明白了一些以前不是很懂的地方,比如: 1)为什么jsonp跨域只能是get请求,而不能是post请求: 2)jsonp跨域的原理到底是什么魔法: 3)除了jsonp跨域之外还有那些方法绕过“同源策略”,实现跨域访问: 4)jsonp和ajax,或者说jsonp和XMLHttpRequest是什么关系: 等等. 1.同源策略 说到跨域,首先要明白“同源策略”.同源是指:js脚本只能访问或者请求相同协议,相同domai

jsonp跨域原理

<!DOCTYPE html><html lang="en"> <head> <meta charset="utf-8"> </head> <body> <input type="button" value="点击请求"> <script src="jquery.min.js"></script> &

javascript实现jsonp跨域问题+原理

在工作中往往存在跨域的问题 ,跨域是什么概念就不在这里了,搜这类问题的肯定已经知道了.下面直接探讨jsonp跨域原理 jspon跨域原理: 1.动态创建一个script标签 var script = document.createElement("script"); 2.添加src属性,value也就是所谓的接口的写入(注:此处要返回的是一个回调函数callback:这里可以省略callback字段写成 script.src = "http://xxxx.com/?user=

JSONP跨域的原理解析

JSONP跨域的原理解析 一种脚本注入行为 在 2011年10月27日 那天写的     已经有 99238 次阅读了 感谢 参考或原文 JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为"Same-Origin Policy"(同源策略).这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容. JavaScript这个安全策略在进

【转】JSONP跨域的原理解析

JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略).这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容. JavaScript这个安全策略在进行多iframe或多窗口编程.以及Ajax编程时显得尤为重要.根据这个策略,在baidu.com下的页面中包含的JavaScript代码,不能访问在

JSONP跨域的原理解析及其实现介绍

JSONP 即 Json padding ,JSONP跨域GET请求是一个常用的解决方案,下面我们来看一下JSONP跨域是如何实现的,并且探讨下JSONP跨域的原理 JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为“Same- Origin Policy”(同源策略).这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档 在同一域下的内容. JavaScr

JSONP跨域的原理解析( 一种脚本注入行为)

JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制, 被称为“some-Origin Policy”(同源策略).这一策略对于JavaScript代码能够访问的页面内容作了很重要的限制, 即JavaScript只能访问与包含它的文档在同一域下的内容. JavaScript这个安全策略在进行多Iframe或多窗口编程.以及Ajax编程时显得尤为重要.根据这个策略,在baidu.com 下的页面中包含的JavaScript的代码,不

JSONP跨域的原理解析(转)

JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为"Same-Origin Policy"(同源策略).这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容. JavaScript这个安全策略在进行多iframe或多窗口编程.以及Ajax编程时显得尤为重要.根据这个策略,在baidu.com下的页面中包含的JavaScript代码,