zoukankan      html  css  js  c++  java
  • JS跨域

    客户端 localjs.php 页面

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <script type="text/javascript" src="jquery-1.9.0.js"></script>
    <script type="text/javascript">
    //客户端服务器ip 192.168.1.101,跨域服务器ip 192.168.155.128
    //原始jsonP跨域方法
    function orgjsonp(){
        //设置服务器回调本地的js方法名
        var jsBackFun = "jsCallBackFun";
        //创建一个script标签元素
        var scriptDom  = document.createElement("script");
        scriptDom.type = "text/javascript";
        scriptDom.src  = "http://192.168.155.128/longserver.php?jsBackFun="+jsBackFun;
        //找到head第一个标签元素
        var headDom = document.getElementsByTagName("head")[0];
        //将新建的script元素添加到headDom第一个子标签之前(这里就是<title></title>之前)
        headDom.insertBefore(scriptDom, headDom.firstChild);
    }
    
    //jquery jsonP跨域
    function jqueryjsonp(){
        var jsBackFun = "jsCallBackFun";
        $.ajax({
            url            : "http://192.168.155.128/longserver.php",
            type           : "get",
            data           : {'jsBackFun' : jsBackFun},
            dataType       : "jsonp"
        });
    }
    
    //跨域服务器端需要回调的js方法
    function jsCallBackFun(data) {
        alert(data.name);
        alert(data.age);
    }
    
    //JSONP跨域方式只能通过GET传值,CROS方式则可通过任何HTTP方式传值
    
    //服务器端设置CORS客户端跨域方法,就是只在服务器端打开允许访问限制,客户端用原有的AJAX正常访问即可
    function crosajax(){
        var cros = true;
        $.post("http://192.168.155.128/longserver.php",{'cros':cros},function(data){
            $.each(data,function(i,n){
                alert(n);
            })
        },"json");
    }
    </script>
    </head>
    <body>
        <input type="button" value="click orgjsonp!" onclick="orgjsonp();" />
        <input type="button" value="click jqueryjsonp!" onclick="jqueryjsonp();" />
        <input type="button" value="click crosajax!" onclick="crosajax();" />
    </body>
    </html>

    跨域服务器端 longserver.php 页面

    <?php
    $cros = $_POST['cros'];
    if(isset($cros)){ //设置CROS跨域
        //允许任何域发起的请求都可以获取当前服务器的数据,这样有很大的危险性,恶意站点可能通过XSS攻击服务器
        //header("Access-Control-Allow-Origin:*");
        //只允许http://192.168.1.101域发起的请求都可以获取当前服务器的数据
        header("Access-Control-Allow-Origin:http://192.168.1.101");
        //要回传的数据
        $backArr   = array('name'=>'crosname','age'=>'crosage');
        echo json_encode($backArr);
        
        /*
        如果页面里不想使用header设置也可以在Apache服务器的httpd.conf里设置
        Apache需要使用mod_headers模块来激活HTTP头的设置,找到 #LoadModule headers_module modules/mod_headers.so 将前面的 # 去掉
        找到
        <Directory />
        AllowOverride none
        Require all denied
        </Directory>
        将其中的 Require all denied 改成 Header set Access-Control-Allow-Origin * 或者 Header set Access-Control-Allow-Origin http://192.168.1.101 即可
        <Directory />
        AllowOverride none
        Header set Access-Control-Allow-Origin http://192.168.1.101
        </Directory>
         */
    }else{ //原始jsonP跨域
        //要回调的js方法名
        $jsBackFun = $_GET['jsBackFun'];
        //要回传的数据
        $backArr   = array('name'=>'jsonpname','age'=>'jsonpage');
        //转换成json串
        $backjson  = json_encode($backArr);
        //拼接成跨域返回的字符串,就是把json串做参数放入一个可以回调的js方法里。
        $resultStr = "$jsBackFun($backjson);";
        //返回
        echo $resultStr;
    }
  • 相关阅读:
    Git的commit your changes or stash them before you can merge
    php面试题汇总一(基础篇附答案)
    php面试题汇总二(基础篇附答案)
    php面试题汇总三(基础篇附答案)
    php面试题汇总四(基础篇附答案)
    nodejs 后台服务启动
    解决failed to push some refs to
    读书计划
    spring cloud 学习
    spring IOC
  • 原文地址:https://www.cnblogs.com/dreamhome/p/5080328.html
Copyright © 2011-2022 走看看