js 跨域
为什么会出现跨域。浏览器有同源策略,所谓同源是指:域名、协议、端口相同。网上有很多介绍跨域的介绍,这里不做详细解析
解决跨域请求的方式有很多种:
当我们正常去请求一个跨域的接口是会出现错误,如下代码
/* 首先我们创建一个api接口 */ /* 我们创建的地址是 http://localhost:51355/home/getname?name=czklove */ /* 首先我们使用正常的请求api的方式请求以下这个接口 */ let xmr = new XMLHttpRequest(); xmr.open('get','http://localhost:51355/home/getname?name=czklove',true); xmr.send(); /* Access to XMLHttpRequest at 'http://localhost:51355/home/getname?name=czklove' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. */
1. jsonp的方式,原生的利用script标签 src 可以请求到任何资源, jquery 也提供了 jsonp的方式,jsonp的方式只支持get方式
/* 首先我们创建一个api接口 */ /* 我们创建的地址是 http://localhost:51355/home/getnametwo?name=czklove */ /* 我们使用jsonp的方式去请求以下这个接口 */ /* 注,我是使用.net 去创建的接口,.net 创建的接口不能是直接返回json,那样是获取不到数据的 */ /* 第一步我们创建一个script标签 */ window.onload = function () { let scrpt = document.createElement('script'); /* 第二步设置sricpt标签的src属性*/ scrpt.src = 'http://localhost:51355/home/getnametwo?name=czklove&callback=callback'; document.body.appendChild(scrpt); /* callback为接受返回数据的回到函数 */ } function callback(res) { console.log(res); } /* .net 的方法 */ /* public string getnametwo (string name,string callback) { string json = "{\"name\":\""+ name + "\",\"sex\":\"man\"}"; return callback + "(" + json + ")"; } */
/*jquery jsonp 的方式*/
window.onload = function () { $.ajax({ url: "http://localhost:51355/home/getnametwo?name=czklove", type: "GET", dataType: "jsonp", //指定服务器返回的数据类型 success: function (data) { console.log(data) } }); }
2.使用postMessage跨域 实现跨域 h5新提出来的一个api,支持ie8+,chrome,ff, 这种方式不太像是跨域请求数据的方式,而是跨页面传送数据
a yemian