Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1240800
  • 博文数量: 164
  • 博客积分: 2993
  • 博客等级: 少校
  • 技术积分: 1718
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-24 11:42
文章分类

全部博文(164)

文章存档

2014年(1)

2013年(36)

2012年(90)

2011年(37)

分类: 架构设计与优化

2013-09-12 14:37:33

为了解决跨域请求的问题,我们之前采用了jsonP的方式。但是jsonp存在两个比较
严重的问题:
1 只支持GET请求。
2 所有的ajax的背后都不是异步请求,容易导致浏览器死锁。
海哥给提供了另外一种解决方案,就是CORS。
目前我已经修改了服务端的代码(BaseAction),请大家修改下客户端的代码。并
加以测试。
例子如下:
客户端: (json类型变量去掉,增加crossDomain: true, xhrFields结构 )

  1. <script>
  2. var param = {
  3. type:'POST',
  4. url: "http://api.test.com/test2.php",
  5. data: "name=John&location=Boston",
  6. xhrFields: {
  7. withCredentials: true,
  8. },
  9. crossDomain: true,
  10. success: function(ret)
  11. {
  12. alert(ret); //json
  13. }
  14. };
  15. $.ajax(param);
  16. </script>
服务端:

  1. $http_origin = $_SERVER['HTTP_ORIGIN'];
  2. header('Access-Control-Allow-Origin: '. $http_origin); // $http_origin不
  3. 能设置为*,为了防止跨域cookie盗用
  4. header('Access-Control-Allow-Methods: POST,GET,OPTIONS');
  5. header('Access-Control-Allow-Credentials: true');
  6. header('Access-Control-Max-Age: 1000');
  7. header('Access-Control-Allow-Headers: *')
阅读(1578) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册