• javascript-代理模式


    JavaScript代理模式笔记

    由于一个对象不能直接引用另一个对象,所以要用过代理对象在这两个对象之间起到中介作用

    1.代理对象形式是通过script标签 demo实例实现的方式也被人称之为JSONP方案

    通过src实现get请求

    1   <script src="http://localhost/html5/jsonp.php?callback=jsonpCallBack&data=getJsonPData"></script>

    回调函数打印请求数据与响应数据

    1   //jsonp回调函数
    2   function jsonpCallBack(res,req){
    3      console.log(res,req);
    4   }

    另外一个域下服务器请求接口

    1 <?php
    2 $data = $_GET["data"];
    3 $callback=$_GET['callback'];
    4 /*生成回调内容,调用jsonp回调函数*/
    5 echo $callback."('success','".$data."')";

    控制台输出结果

    success getJsonPData

    2.代理模板

    被代理页面代码

     <script type="text/JavaScript">
      //代理模板 回调函数
      function callback(data){
      console.log('成功接收数据',data)
      }
      </script>
      <!--内嵌框架 嵌入代理页面作为子页面如 proxy2.html -->
      <iframe name="proxyIframe" id="proxyIframe" src=""></iframe>
      <form action="http://localhost/html5/proxy.php" method="post" target="proxyIframe">
      <input type="text" name="callback" value="callback"/>
      <input type="text" name="proxy" value="http://localhost/html5/proxy2.html"/>
      <input type="submit" value="提交"/> 
      </form>

    代理页面代码

     1     window.onload=function(){
     2       if(top == self) return;
     3       //location.search 获取网址?后面的部分
     4       var arr = location.search.substr(1).split('&'),fn,args;
     5       for(var i = 0,len = arr.length,item;i<len;i++){
     6         item = arr[i].split('=');
     7         if(item[0] == 'callback'){
     8         fn = item[1];
     9         }else if(item[0] == 'arg'){
    10         args = item[1];
    11         }
    12       }
    13       try{
    14           eval('top.' + fn + '("' + args + '")');
    15       }catch(e){
    16       
    17       }
    18       
    19     }
    1 <?php
    2 $proxy = $_POST['proxy'];
    3 $callback = $_POST['callback'];
    4 header("Location:".$proxy."?callback=".$callback."&arg=success");

    测试结果 控制台输出

    成功接收数据 success

  • 相关阅读:
    【JLOI 2015】城池攻占
    【BalticOI 2004】Sequence
    罗马游戏
    《STL源码剖析》STL迭代器分类
    《Effective C++》模版与泛型编程
    《Effective C++》继承与面向对象设计
    《Effective C++》实现 章节
    [C++]const_cast,dynamic_cast,reinterpret_cast,static_cast转型
    [C++]default constructor默认构造函数
    [C++]union联合体总结
  • 原文地址:https://www.cnblogs.com/jtnote/p/5988795.html
Copyright © 2020-2023  润新知