首页 > 代码库 > 跨域处理实践
跨域处理实践
关于跨域的解决办法网上很多方法,之前自己也认真考究过,测试过jsonp的实现原理,看过jquery源码中封装的$.ajax()部分内容,在此只是记录自己在项目中处理过跨域的问题。想看更加详细的可以看看《浏览器同源政策及其规避方法》。
问题1
本地开发环境想通过$ajax()获取测试环境的数据,因为本地和开发域名不一样,受到同源策略限制,不能获取测试环境数据。
解决:
在php的控制器中加上header("Access-Control-Allow-Origin");可以拿到测试环境数据。OK。
问题2:
请求不同资源下的资源。
解决:
使用jsonp,在$.ajax(),添加dataType字段。
php代码
//兼容触屏跨域请求 $jsonpCallback = Yii::app()->request->getParam(‘callback‘); if($jsonpCallback){ if(!$result){ echo $jsonpCallback.‘({errno: 101, msg: "101 ‘. ErrorApi::$errMsg .‘"})‘; exit(); } if( !isset($result[‘prizeId‘]) ){ echo $jsonpCallback.‘({errno: 100, data: ‘. json_encode($result) .‘})‘; }else{ echo $jsonpCallback.‘({errno: 0, data: ‘. json_encode($result) .‘})‘; } exit(); }
jsonp注意:
1、callback和jsonpCallback是jquery源码中默认使用的,也可以自己修改。
2、jsonp只有GET请求,这是由于 script 标签自身的限制决定的。jQuery源码中,POST请求也会转换为GET请求。
3、不能很好的发现错误,并进行处理。与 Ajax 对比,由于不是通过 XmlHttpRequest 进行传输,所以不能注册 success、 error 等事件监听函数。
跨域处理实践
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。