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

    
    
    由于Ajax请求不支持跨域,多个域名交互就会有问题。
    
    跨域的原理是这样的,在html中的src属性请求的地址是可以跨域的,比如<img >和<script>
    
    比如 test.js中
    
    test({name:'meigong',sex:'man'});
    index.html中
    
    <script >  
      
    function test(data){  
      
    alert('姓名:'+data.name+"性别:"+data.sex);  
      
    }  
      
    </script>  
    <script src='http://www.biuman.comt/test/test.js'></script>  
    这时候会弹出框,越狱成功!
    
    
    下面做个封装,把回调的函数名传递过去 模仿百度
    
    
    <script>  
      
    //回调函数  
    function test(a){  
       alert(a.name);  
    }  
    setTimeout(function(){  
        var url ="http://www.biuman.com/test/jsonp/test.php?cb=test";  
        var script =document.createElement('script');  
        script.setAttribute('src', url);  
        document.getElementsByTagName("body")[0].appendChild(script);  
    },100);  
    </script >
    test.php  
      
    <?php  
    $filename = './su';  
    $fun = $_GET['cb'];  
    $arr=array(  
    'name'=>'meigong',  
    'sex' =>'man'  
    );  
    $res = json_encode($arr);  
    $res = $fun." (".$res.")";  
    file_put_contents($filename,$res);  
    header('Content-type: biuman/test');  
    header('Content-Disposition: attachment; filename='.$filename);  //下载模式,firebug的网络 中响应看不到内容  
    readfile("$filename");  
    exit();  
    ?>  
    此外,jquery 也封装了jsonp
    
    <script >  
    $(function(){  
        $.ajax({  
             url: "http://www.biuman.com/test/jsonp/test.php",  
             dataType: "jsonp",  
             jsonp: "cb", //  
             //传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)  
            jsonpCallback:"test", //需要的回调函数  
             success: function(data){  
                    alert(data.name);  
             },  
            error: function(){  
                alert('网络异常');  
            }  
        });  
    })  
    </script >  


    <script type="text/javascript" src="http://sources.ikeepstudying.com/js/jquery-1.8.3.min.js"></script>
    <script type="text/javascript">
      $.getJSON("http://test.ikeepstudying.com/json.php?callback=?",
      function(result) {
        for(var i in result) {
          alert(i+":"+result[i]);//循环输出a:1,b:2,etc.
        }
      });
    </script>

  • 相关阅读:
    1-1 课程简介 & 2-1 IDEA与Eclipse的不同 & 2-3 Intellij IDEA安装
    MyBatis入门
    贪婪法——————贪心算法
    Java排序之直接选择排序
    是时候学一波STL了。。。
    Java提高篇(三一)-----Stack
    Android 经常使用工作命令mmm,mm,m,croot,cgrep,jgrep,resgrep,godir
    【POJ 2750】 Potted Flower(线段树套dp)
    POJ 题目3321 Apple Tree(线段树)
    Android新手入门2016(14)--FragmentTabHost实现选项卡和菜单
  • 原文地址:https://www.cnblogs.com/qiandu/p/4281000.html
Copyright © 2011-2022 走看看