13、代理模式

代理模式:由于一个对象不能直接引用另一个对象,所以需要通过代理对象在这两个对象之间起到中介的作用。

由于用户相册模块上传的图片照片量越来越大,导致服务器端需要将图片上传模块重新部署到另外一个域(另外一台服务器),这样对前端来说,用户上传图片的请求路径发生变化,指向其他服务器,这就导致跨域问题。

1 // 当前 域名wwww.xx.com
2 $.ajax({
3     url : 'http://upload.xx.com/upload/php',
4     success : function(res){
5         //无法获得返回数据
6     }
7 });

 

打开控制台,你会发现报错了,出现跨域问题了

//浏览器控制台报错   xmlhttprequest cannot load http://upload.xx.com/upload/upload.php,  no 'access-controll-allow-origin' header is present on the requested resource.

 

13.1跨越事项

  跨域 : javascript 对安全访问因素的考虑,不允许跨域调用其他域名

比如:  http:// www.baidu.com   ,淘宝域名 http://www.taobao.com  不同域下的页面是不能直接访问的。百度域名和淘宝域名不能互相访问,这也是js 中因同源策略所定义的限制,不过近有这还不够,js   还对同一个域下不同端口号、同一域名不同协议、域名和域名对应的ip、 主域与子域、子域与子域等做了限制,都不能直接调用。如下 :

1 // 同一个域名不同端口号  如:http://www.baidu.com:8001   与  http://www.baidu.com:8002
2 // 同一个域名不同协议   https://www.baidu.com  与  http://www.baidu.com
3 // 域名与域名对应的ip   http://www.baidu.com  与  http://61.135.169.125
4 // 主域 与子域名   http://www.baidu.com  与    http://b.a.com
5 // 子域 与 子域  http://xxx.baidu.com  与 bbb.baidu.com

这么多限制。

 

13.2   JSONP

  

 1 $.ajax({
 2    async:false,
 3    url: http://跨域的dns/document!searchJSONResult.action,
 4    type: "GET",
 5    dataType: 'jsonp',
 6    jsonp: 'jsoncallback',
 7    data: qsData,
 8    timeout: 5000,
 9    beforeSend: function(){}
10    //jsonp 方式此方法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了
11    });

 

服务器端

1 echo $_GET["callback"] . "({\"reqUrl\": reqUrl });";  

jsonp 理解河上的小船,小船要将请求发送到对面,然后对面的人将数据发到小船上返回。

 

集中跨域方式:

script src/img src \ iframe \ action(表单)\ domain

 

posted on 2016-09-27 23:47  爱拼才有钱  阅读(125)  评论(0编辑  收藏  举报

导航