• 跨域处理实践


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

  • 相关阅读:
    Kali学习笔记38:文件上传漏洞
    Kali学习笔记37:APPSCAN
    Kali学习笔记36:AVWS10的使用
    Kali学习笔记35:使用VBScript、PowerShell、DEBUG传输文件
    Kali学习笔记34:配置TFTP和FTP服务
    《day13--异常的进阶和包的使用》
    《java作业》
    《day12---异常》
    《AppletButtonEvent.java》
    《CheckboxDemo.java》
  • 原文地址:https://www.cnblogs.com/leaf930814/p/6994530.html
Copyright © 2020-2023  润新知