域名地址的组成:
当协议,子域名,主域名,端口号任意一个不同时,都算作不同域。不同域之间资源请求就叫做跨域。
如果你直接跨域访问了,浏览器将报错,因为你没有访问权限。javascript出于安全方面考虑,不允许跨域调用其它页面的对象。a.com域名下的js无法操作b.com域名下的对象。
处理跨域问题:
通过在同域名的web服务器端创建一个代理
在上海服务器上有一个服务:
www.shanghai.com/service.php
在北京服务器上也建一个服务:
www.beijing.com/proxy.shanghaiservice.php
前端就可以通过北京这个服务从后端访问上海那个服务,然后将响应值返回给前端,北京这个服务就是在后端做了一个代理。所以前端访问了北京这个代理服务就相当于访问了上海那个服务,但这已经属于后台技术。JSONP可用于解决主流浏览器get请求的跨域问题
在www.aaa.com中
<script>
function jsonp(json){
alert(json["name"]);
}
</script>
<script src="http://www.bbb.com/jsonp.js"></script>
//jsonp.js中:
jsonp({"name":"二毛","age":21});
//script标签可以向不同的域名请求
以上代码,也就是a域名声明了一个函数,b域名去调用。这种方法主要是借助了script标签可以跨域请求的特性。
- jquery的ajax中本来就支持jsonp的处理方式
在get请求中:
dataType:”jsonp”,
jsonp:”callback”, (添加一个jsonp的属性,后端要获取到这个值)
对应的的后端代码:
$jsonp=$_GET[“callback”]; (添加获取)
$result=$jsonp.’({“msg”:”未找到”})’;(将原本的数据用括号括起来,前面再加上获取的jsonp)