JavaScript跨域问题--CORS

本文介绍如何利用XMLHttpRequest (XHR) 和XDomainRequest (XDR) 实现浏览器间的跨域请求。详细解释了不同浏览器对CORS的支持情况,并提供了使用XHR和XDR进行GET和POST请求的具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.CORS

Firefox3.5+、Safari4+、Chrome、iOS版Safari和Android平台中的WebKit都通过XMLHttpRequest对象实现对CORS原生支持。IE则是引入XDR类型(与XHR类似)来支持CORS。

XHR跨域:

    跨域注意:1.不能使用setRequestHeader()设置自定义头部

                     2.不能发送接收cookie

                     3.调用getAllResponseHeaders()总会返回空字符串

function createXHR(){
	var xhr;
	if(window.XMLHttpRequest){
		xhr = new XMLHttpRequest();
	}else{
		xhr = new ActiveXObject('Micosoft.XMLHTTP');
	}
	return xhr;
}
var xhr = createXHR();
xhr.onreadystatechange = function(){
	if(xhr.readyState==4){
		try{
			if((xhr.status == 200 && xhr.status < 300) || xhr.status == 304){
				console.log(xhr.status, xhr.responseText);
				console.log(xhr.getAllResponseHeaders());
			}else{
				console.log("unsuccessful:" + xhr.status + xhr.statusText);
			}	
		}catch(ex){
			xhr.ontimeout();
		}
	}
};
xhr.timeout = 1000;
xhr.ontimeout = function(){
	console.log("timeout");
}
xhr.open("get", "http://www.somewhere-else.com/page/", true);
xhr.send();
XDR实现跨域:
var xdr = new XDomainRequest();
xdr.onload = function(){
	alert(xdr.responseText);
};
//xdr出现错误时,不能收到具体错误,只能检测到存在错误
//导致xdr出错的原因很多,onerror函数是必不可少的
xdr.onerror = function(){
	alert("an error occurred");
}
//xdr的open函数只接受两个参数,只能异步执行
xdr.open("get","http://www.somewhere-else.com/page/");
xdr.send();

XDR的post请求:

xdr.open("post","http://www.somewhere-else.com/page/");
xdr.contentType = "application/x-www-form-urlencoded";
xdr.send("name=value1&pass=value2");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值