繁华落尽、勿忘初心

导航

Javascript跨域

跨域:只要协议、域名或端口有任何一个不同,就定义为跨域。

CORS(Cross-Origin Resource Sharing):即跨域资源共享。定义了在访问跨域资源时,浏览器和服务器该如何沟通。CORS的基本思想就是使用自定义HTTP头部

让浏览器和服务器进行沟通,从而决定请求或相应是应该成功还是失败。

 

通过CORS跨域:

服务端对于CORS的支持,主要通过设置Access-Control-Allow-Origin来进行。如果浏览器检测到相应的设置,就可以允许AJAX进行跨域访问。

例如:

AngularJS中$http就是简单的XMLHttpRequest的封装。

this.BASE_URL = "http://32.1.2.81:80/fgwservices/";

this.getProjectSummary = function (year,type) {
      var deferred = $q.defer();
      var url = configService.BASE_URL + "data/detail.iproject.summary";
      $http.get(url).success(function (data) {
           var filter = jsonPath(data, "$.[?(@.year==" + year +"&@.type=="+type+")]")[0];
           deferred.resolve(filter);
       });
       return deferred.promise;
};

在后台方法中:

response.addHeader("Access-Control-Allow-Origin","*");

即可跨域访问。

 

通过jsonp来跨域:

jsonp也叫填充式json,是应用json的一种新方法。

jsonp由两部分组成:回调函数和数据。回调函数就是当响应到来时应该在页面调用的函数,而数据就是传入回调函数时的json数据。

在js中,我们直接使用XMLHttpRequest请求不同域上的数据是不可以的,但在页面上引入不同域的脚本文件是可以的,jsonp也正是利用这个来实现跨域的。

例如:<script src="http://example.com/data.php?callback=dosomething"></script>

 

CORS和jsonp方式对比:

1)jsonp只能实现get请求,而CORS支持所有类型的HTTP请求;

2)使用CORS可以使用普通的XMLHttpRequest发起请求和获得数据,比起jsonp有更好的错误处理。

所以说,jsonp一般只在浏览器不支持CORS的情况下才使用。

posted on 2015-06-28 19:49  繁华落尽、勿忘初心  阅读(138)  评论(0编辑  收藏  举报