天天看点

JSONP跨域以及CORS跨域JSONP跨域以及CORS跨域

JSONP跨域以及CORS跨域

1.什么是跨域?

现代浏览器为了安全,做了一个同源限制,以防网络上的接口可以不受限制的被任意人调用,服务器是不管这些事情的。
跨域指的是A网站向B网站发a
当协议相同+域名相同+端口号相同浏览器认为是同一个网站,不收同于策略的影响,可以正常的发送AJAX请求。
           

2.JSONP跨域

JSONP 跨域的原理,就是利用 某些标签,跨域请求时,不受同源策略的限制 比如 script img 
		JS原生方式的JSON跨域 
		JSONP 跨域 跟XMLHttpRequest 异步请求对象没关系
		JSONP:他只支持GET请求 
           
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			function getResult(res){
				alert(res.province)
			}
		</script>
		//使用JSONP获取手机号信息
		//callback后为回调函数名
		<script src="https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13333333333&callback=getResult" type="text/javascript" charset="utf-8">
			
		</script>
	</head>
	<body>
	</body>
</html>
           

3.JQuery封装过后的JSONP

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<button type="button">JQuery封装过后的JSONP</button>
	</body>
</html>
<script type="text/javascript">
	/* function getRes(res){
		alert(res.catName);
	} */
	$("button").click(function(){
		$.ajax({
				type:"GET",
				url:"https://tcc.taobao.com/cc/json/mobile_tel_segment.htm",
				data:{tel:"13259141515"},
				jsonp:"callback",//jsonp 请求 回调函数名Jqurey会自动生成 
				//jsonpCallback:  可指定回调函数名
				/* jsonpCallback:"getRes", */
				success:function(res){
					alert(res.catName);
				},
				dataType:"jsonp"
			});
	})
			
</script>
           

4.getJSON()方法简化jsonp请求

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<button type="button">按钮</button>
	</body>
</html>
<script type="text/javascript">
	$("button").click(function(){
		$.getJSON("https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13259143333&callback=?",function(res){
						alert(res.catName);
					});
	})
	//callback=? 回调函数名给个? 让Jquery随机生成一个回调函数名	
</script>
           

5.CORS跨域

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<button type="button" onclick="sendAjax()">发送Ajax请求</button>
	</body>
</html>
<script type="text/javascript">
	function sendAjax() {
		//创建Ajax请对象
		var xmlhttp = new XMLHttpRequest();
		//发送请求:post请求 他的请求参数,放在请求体里面来提交的,所以一般不在url后面拼接
		xmlhttp.open("POST", "http://localhost:8080/PostDemo_war_exploded/demo", true);
		//3.设置请求头信息
		xmlhttp.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
		xmlhttp.send("username=zhangsan&password=123456")
		//接收响应
		xmlhttp.onreadystatechange = function() {
			//判断readyState就绪状态是否为4,判断status响应状态码是否为200
			if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
				//获取服务器的响应结果
				var responseText = xmlhttp.responseText;
				alert(responseText);
				var jsonObj=JSON.parse(responseText);
				//alert(jsonObj);
				alert(jsonObj.username);
			}
		}
	}
</script>
           

继续阅读