zoukankan      html  css  js  c++  java
  • JSONP 理解 和 实例 讲解

    1.什么是jsonp

    1.1 同源策略 

    浏览器同源策略的限制,XmlHttpRequest只允许请求当前源(相同域名、协议、端口)的资源。

    -1)jsonp只支持get请求

    -2)不受同源策略限制 ,兼容性好 不需要XMLHttpRequest(ActiveX)支持,通过js回调函数返回结果

    -3)不能解决 不同域的两个页面之间js调用的问题

    2. jsonp 原理

    动态添加一个script标签,get链接上发送回调函数名称 传给服务器 服务器获取回调函数名称 返回这个函数名称的JS函数(拼装函数) json数据作为函数的实际参数传入 返回的数据是js函数  在前端调用回调函数( json数据传入) 执行回调函数

    3.实例

    先来说说 服务端应该返回的数据形式 如下所示 用的php  thinphp框架编写的 访问URL 是 

    http://91hx.xicp.cn:8989/Service/Validata/testJsonP?callback=jsonpCallback callback后面的名字要传给服务器的 后端拼装成一个js回调函数 这样前台json数据就作为回调函数的参数传入 获取到数据了
     public function  testJsonP(){
            $jsonname =I('get.callback');//获取URL上的callback名称 也就是获取jsonpCallback
    
            $a = [name=>'张三',sex=>'男',msg=>'返回成功!'];// 一个数组数据
           $json = json_encode($a);// 转成json数据
    
            echo  $jsonname.'('.$json.');';//正确的格式应该是这样 jsonpCallback({"name":"u5f20u4e09","sex":"u7537","msg":"u8fd4u56deu6210u529fuff01"}); 不要忘记分号; 这样返回的才是一个js函数 前台肯定有这个函数名字才行
    
    }
    

    tip:关联数组 上面例子 $a = array( "msg" => "返回成功!")

    前台 访问URL http://localhost:63343/H5/jsonP.html 动态添加一个script标签 src里 调用回调函数 jsonpCallback() . ?callback=jsonpCallback名字随便起 后端获取的就是jsonpCallback这个名字而已 

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    
    <script type="text/javascript">
    
        function jsonpCallback(date){
            console.log(date);
            alert(date);
            alert(date.msg);
        }
        var script =document.createElement('script');
        script.src='http://91hx.xicp.cn:8989/Service/Validata/testJsonP?callback=jsonpCallback';
        document.body.insertBefore(script,document.body.firstChild);
    
    
    </script>
    
    </body>
    </html>
    

     我们可以在浏览器里 这里我用的谷歌直接查看 数据是否访问正确 切换到Network标签下 可以看到生成的访问地址 点击然后

     

    这下面的图 点击一下左侧链接   切换到Response就可以看到响应的数据了 跟前端写的函数名要一致 里面的json数据就是 那个函数的参数 传入 别忘记有分号;

    前端我们已经console.log 数据了 也可以查看 切换到Console标签下

  • 相关阅读:
    C++高级程序员(廊坊+高薪)欢迎各种漂回家!(该职位已截止)
    utf8_unicode_ci和utf8_general_ci区别
    Percentencoding
    libiconv GNU Project Free Software Foundation (FSF)
    2013年1月6日北京交流会:当当网如何打造个性化推荐&精准营销生态系统
    COM Vs .NET (Qt ActiveQt)
    新一篇: Unicode字符编码规范 实例详细介绍各种字符集编码转换问题
    甩开外包,雄踞榜首:揭开“宫爆老奶奶”成功的秘密
    awk使用命令
    API SOCKET基础(三)网络字节序与主机字节序的转换
  • 原文地址:https://www.cnblogs.com/xxx91hx/p/4605258.html
Copyright © 2011-2022 走看看