zoukankan      html  css  js  c++  java
  • jsonp总结

    由于“同源策略”的限制,ajax不能做跨域请求,jsonp是当下解决跨域请求最流行的方案,来个例子(index.html):

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Document</title>
        <script src="js/jquery.js"></script>
    </head>
    <body>
    <input type="button" value="submit" id="submit">
    <div id="txt"></div>
    <script>
    //监听对象
    // document.getElementById('submit').onclick = function(){
      
    // }
    //简单的jsonpCallback封装
    function jsonpCallback(data){//回调函数
      console.log(data);
    }
    var jsonp = document.createElement("script");//动态添加脚本
    jsonp.type = "text/javascript";
    jsonp.src="json.php?callback=jsonpCallback";
    document.getElementsByTagName("head")[0].appendChild(jsonp);
    </script>
    </body>
    </html>

    json.php页面:

    <?php
    $info = array("name"=>"复读机2","age"=>223);
    $infoencode = json_encode($info);
    $callback = $_GET["callback"];
    echo $callback."(".$infoencode.")";//返回带有json格式数据的字符串
    ?>

    说明一下:

    发出请求的页面的执行过程:

      动态添加script标签,当添加完成之后,立即向json.php页面做出请求,这个请求是get请求,并携带callback=jsonpCallback查询字符串。

    被请求的页面的执行过程:

      1将关联数组通过json_encode函数转化为json数据{"name":"复读机","age":23}并赋值给$infoencode变量

      2通过$_GET函数获取callback的值jsonpCallback

      3返回jsonpCallback({"name":"u590du8bfbu673a2","age":223})(这个值是通过utf-8编码的)

    发送请求页面的执行过程:

      收到一个执行函数,并且执行jsonpCallback函数,完成数据传输!

    注意的地方是:1由于jsonp的原理,同域也可以接收到数据;2不同子域名之间也属于跨域,不能通过ajax直接请求

  • 相关阅读:
    POJ 1321 棋盘问题
    算法导论 4.1 最大子数组问题
    矩阵快速幂
    固定定位
    HTML排版
    CSS笔记2
    HDU 1796 How many integers can you find(容斥原理)
    HDU 2147 kiki's game(博弈经典题)
    HDU 1846 Brave Game(巴什博弈超简单题)
    HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)
  • 原文地址:https://www.cnblogs.com/wang-jiang/p/4521094.html
Copyright © 2011-2022 走看看