跨域名相关知识

浏览器默认都是拒绝ajax跨域名请求数据

但可以通过php设置header信息来允许请求

header("Access-Control-Allow-Origin:*"); 或 header("Access-Control-Allow-Origin: *.mi.com");

但此中方式只适合firefox,google浏览器,微软的IE7,8,9浏览器都是不支持跨域请求,没有解决方法

IE浏览器唯一解决方式只能是jsonp的方式输出<script>标签的形式来解决跨域请求!

好消息是手机端浏览器都是采用webkit内核都是只需要设置下header就直接支持跨域请求,不需要再做兼容了!

 

关于解决跨域需要设置cookie的问题

IE浏览器通过jsonp访问形式解决跨域时必须在php中设置隐私策略,才能种植cookie

header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

而firefox,google浏览器则不需要设置都可以直接种植cookie!

https网站ajax请求http网站或加载http静态资源时(css,js,image)时在有些浏览器中可能会禁止访问,所以最好升级成https

 

json和jsonp的区别

json是请求数据的一种方式,当不涉及cookie传送时建议用这种方式,取回来的数据是json格式

jsonp是为子解决IE不能跨域以及需要种植cookie和发送cookie时的一种解决方案,比如要验证登录才能取数据等等,缺陷是只能get方式,如图片数据无法post提交

 

 

如使用jquery扩展库,

ajax请求时不使用jsonp方式时可以设置xhrfields 参数实现传递cookie过去

输入图片说明

 

<script>
		$(function(){
			$.ajax({
				type: "post",
				url: '//m.test.shengmiguo.com/business_app.php?app=business_member&do=login',
				data: {
					username:'1325028',
					password:'123456'
				},
				dataType: "jsonp",  //或json数据格式

				success: function(data){
					alert(data.msg);
				}
			});
			
		});
	</script>

 

则非常方便解决跨域来请求数据的难题

 

注:若浏览器开启了禁止或阻止第三方 Cookie 和网站数据,则jsonp也无法写入cookie

另外一个完全解决方法是使用空iframe,设置长宽为0,使用form表单target属性提交,这样可以做到任意post大数据提交,然后js设置document.domain=*.test.com

如:

<script>

document.domain=*.test.com;

parent.login(user,password);

</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值