跨域处理实践

  关于跨域的解决办法网上很多方法,之前自己也认真考究过,测试过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 等事件监听函数。

 

转载于:https://www.cnblogs.com/leaf930814/p/6994530.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值