AJAX 解决跨域问题

1、同源策略

同源策略(Same-Origin Policy) 最早由 Netscape 公司提出,是浏览器的一种安全策略。

同源: 协议、域名、端口号 必须完全相同。

违背同源策略就是跨域。

2、解决跨域

2.1、JSONP
  1. JSONP(JSONwithPadding),是一个非官方的跨域解决方案,纯粹凭借程序员的聪明才智开发出来,只支持 get 请求。
  2. 在网页有一些标签天生具有跨域能力,比如:img link iframe script。 JSONP 就是利用 script 标签的跨域能力来发送请求的。
  3. JSONP 的使用
1.动态的创建一个 script 标签 
varscript=document.createElement("script"); 

2.设置 script 的 src,设置回调函数 
script.src="http://localhost:3000/testAJAX?callback=abc"; 
functionabc(data){ 
	alert(data.name); 
}; 

3.将 script 添加到 body 中 
document.body.appendChild(script); 

4.服务器中路由的处理 
router.get("/testAJAX",function(req,res){ 
	console.log("收到请求"); 
	varcallback=req.query.callback; 
	varobj={
		name:"孙悟空", 
		age:18
	} 
	res.send(callback+"("+JSON.stringify(obj)+")");
}); 
  1. jQuery 中的 JSONP
<!DOCTYPEhtml> 
<htmllang="en"> 
<head> 
	<metacharset="UTF-8"> 
	<title>Title</title> 
</head> 
<body> 
	<button id="btn">按钮</button> 
	<ul id="list"></ul> 
	<script type="text/javascript" src="./jquery-1.12.3.js"></script> 
	<script type="text/javascript"> 
		window.onload=function(){ 
			var btn = document.getElementById('btn') 
			btn.onclick=function(){
				$.getJSON("http://api.douban.com/v2/movie/in_theaters?callback=?",function (data){ 
					console.log(data); // 获 取 所 有 的 电 影 的 条 目 varsubjects=data.subjects; // 遍 历 电 影 条 目
					for(var i=0; i<subjects.length; i++){ 
						$("#list").append("<li>"+ subjects[i].title+"<br/>"+ "<imgsrc=\""+subjects[i].images.large+"\">"+ "</li>"); 
					}
				});
			}
		} 
	</script> 
</body> 
</html>

2.2、CORS

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

  1. CORS(Cross-OriginResourceSharing),跨域资源共享。CORS 是官方的跨域解决方案,它的特点是不需要在客户端做任何特殊的操作,完全在服务器中进行处理,支持 get 和 post 请求。跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源
  1. CORS 是通过设置一个响应头来告诉浏览器,该请求允许跨域,浏览器收到该响应以后就会对响应放行。
  2. CORS 的使用
    主要是服务器端的设置:
router.get("/testAJAX",function(req,res){
	//通过 res 来设置响应头,来允许跨域请求 
	//res.set("Access-Control-Allow-Origin","http://127.0.0.1:3000"); 
	res.set("Access-Control-Allow-Origin","*"); 
	res.send("testAJAX 返回的响应");
});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玳宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值