• JSONP


    定义(前后端交互只能是字符)

    利用src标签,引入我们即将要跨域的资源,利用回调函数来拿到原本跨域的数据

    1.

    在jsonp1.txt中

    1 <script src="http://localhost/1903/jsonp/data/myjsonp1.txt"></script>
    2 <script>
    3     //jsonp 通过scr标签引入资源
    4      fn()
    5 </script>

    在json1.html中

    1 <script src="http://127.0.0.1/1903/jsonp/data/jsonp1.txt"></script>
    2 <script>
    3     // jsonp是通过script标签引入资源
    4     
    5     fn()//hello
    6 </script>

    2.

    在jsonp2.html中

    1 <?php
    2 
    3     // echo "console.log('hello')";
     //由于echo后面输出的是字符,所以需要加 ''
    4  echo "function fn(){ 5  console.log('HELLO') 6  }"; 7 8 ?>

    在json2.html中

    1 <script src="http://127.0.0.1/1903/jsonp/data/jsonp2.php"></script>
    2 <script>
    3     // jsonp是通过script标签引入资源
    4     fn()
    5 
    6     // 发现:
    7         // 只要是被script标签引入的文件,都会先解析,解析之后,将输出的字符,按照js代码执行,--->在HTML中写函数,在PHP中执行
    8 </script>

    3.

    在js中定义函数,在php中执行函数。在php执行函数传参-->在HTML中的函数中接收-->php文件通过script的src引入进来,把php中echo的出来的东西当做js代码来执行,执行函数时候就把PHP中的数据带了过来。这时候实现跨域(HTML的地址和src的地址不一致)

    在jsonp3.html中

     1 <script>
     2     // jsonp是通过script标签引入资源
     3     
     4     // 发现:
     5     // 只要是被script标签引入的文件,都会先解析,解析之后,将输出的字符,按照js代码执行
     6     function fn(res){
     7         console.log(res)
     8     }
     9 </script>
    10 <script src="http://127.0.0.1/1903/jsonp/data/jsonp3.php"></script>

     1 <?php
     2         $data="hello";
     3         //echo "fn(123)";
     4 
     5         echo "fn(".$data")";// hello is not defined
     6         //等同于 "fn(hello)" //hello是字符,外面的""是PHP,里面的是js的
     7         
     8         echo "fn('".$data."')";        //hello
     9         
    10     ?>
    
    

    4.

     1 <script>
     2     var oaaa=document.getElementById("aaa")
     3     var obbb=document.getElementById("bbb")
     4     var obtn=document.getElementById("btn")
     5     obtn.onclick=function(){
     6         var url="http://127.0.0.1/1903/jsonp/data/jsonp4.php";
     7         var oa=oaaa.value;
     8         var ob=obbb.value;
     9         jsonp(url,function(res){
    10             console.log(res)
    11         },{
    12             user:oa,
    13             pass:ob,
    14         });
    15     }
    16     function jsonp(url,callback,data){
    17         data=data?data:{};//data为参数,不需要声明
    18         let str="";
    19         for( let i in data){
    20             str=str+i+"="+data[i]+"&";
    21         }
    22         url=url+"?"+str.slice(0,str.length-1);
    23 
    24         //1.script标签
    25         var script=document.createElement("script");
    26         script.src=url;
    27         document.body.appendChild(script);
    28         //2.函数
    29         window.fn=function (res){
    30             callback(res);//hello php,这是接收到的数据:---
    31         }
    32     }
    33 </script>
     1 <?php
     2 
     3     $u = @$_GET["user"];
     4     $p = @$_GET["pass"];
     5 
     6     $data = "hello php,这是接收到的数据:".$u."---".$p;
     7 
     8     echo "fn('". $data ."')";//字符串拼接
     9 
    10 ?>

    5.

     1 <script>
     2     var oaaa=document.getElementById("aaa")
     3     var obbb=document.getElementById("bbb")
     4     var obtn=document.getElementById("btn")
     5     obtn.onclick=function(){
     6         var url="http://127.0.0.1/1903/jsonp/data/jsonp5.php";
     7         var oa=oaaa.value;
     8         var ob=obbb.value;
     9         jsonp(url,function(res){
    10             console.log(res)
    11         },{
    12             user:oa,
    13             pass:ob,
    14             // "cb表示后端规定的函数名所在的字段名"
    15             cb:"asmjdgajksd",
    16             // cloumnName表示前端的函数如何正确找到函数名;cloumnName和后台没关系,自己定义
    17             cloumnName:"cb"
    18         });
    19     
    20     }
    21     function jsonp(url,callback,data){
    22         data=data?data:{};//data为参数,不需要声明
    23         let str="";
    24         for( let i in data){
    25             str=str+i+"="+data[i]+"&";
    26         }
    27         url=url+"?"+str.slice(0,str.length-1);
    28 
    29         //1.script标签
    30         var script=document.createElement("script");
    31         script.src=url;
    32         document.body.appendChild(script);
    33         //2.函数
    34          //data.cloumnName找到的是"fnName",但是这个单子本身不是我们要找的,
            上面的对//应的属性"cb"才是我们需要的。所以需要再解析一层data[data.cloumnName]
    35    // 最后cloumnName与后台完全没关系, 36    // window[data["callback"]] = function(res){ 37   // window["asmjdgajksd"] = function(res){ 38 // window.asmjdgajksd = function(res){ 39 window[data[data.cloumnName]]=function (res){ 40 callback(res);//hello php,这是接收到的数据:--- 41 } 42 43 } 44 </script>
     1 <?php
     2 
     3     $u = @$_GET["user"];
     4     $p = @$_GET["pass"];
     5     $fnName = @$_GET["cb"];
     6 
     7     $data = "hello php,这是接收到的数据:".$u."---".$p;
     8 
     9 
    10     echo $fnName."('". $data ."')";
    11 
    12 ?>
  • 相关阅读:
    WinForm多线程+委托防止界面假死
    网页制作知识库
    HTML Agility Pack:簡單好用的快速 HTML Parser
    .NET 4.0 和 .NET 4.0 Client Profile 区别
    使用OPCNetAPI连接OPCServer
    Win7系统删除微软拼音
    Unity3D脚本18:可视化辅助设置类 Gizmos
    mysql 索引
    重启oracle方法一二三
    php7 安装扩展
  • 原文地址:https://www.cnblogs.com/sansancn/p/10873901.html
Copyright © 2020-2023  润新知