博主信息
博文 31
粉丝 0
评论 0
访问量 37251
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
实战展示CORS与JSONP跨域请求
emy
原创
1073人浏览过

一、基础知识:

CORS: 跨域资源共享。
JSONP:通过标签和属性发起一个跨域。
同源策略:多个页面协议、域名、端口完全一样。
同源策略: 针对脚本,不针对标签。
如果服务器上脚本设置允许访问,则可以访问,允许访问请求头header('Access-Control-Allow-origin: // + 允许访问的域名')

1-CORS跨域请求:

<script>
      var btn = document.querySelector("button");
      btn.addEventListener(
        "click",
        function () {
          // 1. 创建Ajax对象
          var xhr = new XMLHttpRequest();

          // 2. 监听请求
          xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
              console.log(xhr.responseText);
              document.querySelector("h2").innerHTML = xhr.responseText;
            }
          };

          // 3. 初始化请求参数
          xhr.open("GET", "http://php.edu/0521/me/test1.php", true);

          // 4. 发送请求
          xhr.send(null);
        },
        false
      );
    </script>

test1.php

<?php
$user['name'] = 'Peter Zhu';
$user['email'] = 'peter@php.cn';

QQ截图20200606230359.jpg
2-JSONP 跨域请求:

<script>
      // 1. 准备好回调处理函数
      function handle(jsonData) {
        console.log(jsonData);
        var data = JSON.parse(jsonData);
        console.log(data);

        // 将接口返回的数据渲染到页面中
        var ul = document.createElement("ul");
        ul.innerHTML += "<li>" + data.title + "</li>";
        ul.innerHTML += "<li>姓名:" + data.user.name + "</li>";
        ul.innerHTML += "<li>邮箱: " + data.user.email + "</li>";
        document.body.appendChild(ul);
      }

      // 2. 点击按钮发起一个基于JSONP的跨域请求
      var btn = document.querySelector("button");
      btn.addEventListener(
        "click",
        function () {
          var script = document.createElement("script");
          script.src = "http://php.edu/0521/me/test2.php?jsonp=handle&id=1";
          document.head.appendChild(script);
        },
        false
      );
    </script>

test2.php

<?php
    // 这里返回的是JOSN格式,只支持utf-8,要设置字符集
    header('content-type:text/html;charset=utf-8');
    $callback = $_GET['jsonp'];
    $id = $_GET['id'];
    // 根据查询条件返回不同内容
    $users = [
        '{"name":"emy", "email":"emy@qq.cn"}',
        '{"name":"maymay", "email":"may@qq.cn"}',
        '{"name":"jing", "email":"jing@qq.cn"}',
    ];
    if(array_key_exists(($id-1), $users)) {
        $user = $users[$id-1];
    }
    $json = '{"title":"用户信息", "user":'.$user.'}';
    echo $callback .'('.json_encode($json).')';

QQ截图20200606231230.jpg
三、总结:这节课基本能听明白。离自己亲自全部写出来,仍需要努力学习。现在才写作业,真的是等于把之前听的内容复习了一下。*——~

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:不建议这样集中提交, 学习效果非常不好, 以后要注意
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学