博主信息
博文 65
粉丝 2
评论 0
访问量 74946
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
想当黑客?想拿别人网站数据?实例演示jsonp跨域原理与实现...
张福根一修品牌运营
原创
987人浏览过

实例演示jsonp跨域原理与实现

效果展示:

跨域原理与实现

代码分享:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>实例演示jsonp跨域原理与实现</title>
  7. <style>
  8. form {
  9. display: inline-grid;
  10. grid-template-columns: 5em 15em;
  11. gap: 1em;
  12. padding: 1em;
  13. border: 1px solid #000;
  14. background-color: lightcyan;
  15. }
  16. form button {
  17. grid-area: auto / 2 / auto / span 1;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <form action="" onsubmit="return false;">
  23. <label for="username">用户名:</label>
  24. <input type="text" id="username" name="username" />
  25. <label for="email">邮箱:</label>
  26. <input type="email" id="email" name="email" />
  27. <button>保存</button>
  28. </form>
  29. <hr />
  30. <button id="jsonp">JSONP跨域请求</button>
  31. <script>
  32. // 拿到按钮并监听
  33. const btn = document.querySelector("button#jsonp");
  34. btn.addEventListener("click", createScript, false);
  35. // createScirpt()动态创建<script>标签
  36. function createScript() {
  37. // 跨域请求的url
  38. // 以get方法添加查询参数,就是放在url中,以键值对方式添加每个键值对之间用&分割
  39. // jsonp:重点在于Url的参数中必须要有一个回调参数
  40. let url = "http://bbs.cn/index.php?id=1&jsonp=show";
  41. // 创建script元素
  42. const script = document.createElement("script");
  43. // 将跨域请求的url赋值给src属性
  44. script.src = url;
  45. // 将script添加到页面中
  46. document.head.appendChild(script);
  47. }
  48. // 函数声明
  49. function show(user) {
  50. // 返回的数据已经自动解析成了js对象了
  51. console.log(user);
  52. document.querySelector("#username").value = user.name;
  53. document.querySelector("#email").value = user.email;
  54. }
  55. </script>
  56. </body>
  57. </html>

后端脚本http://bbs.cn/index.php

  1. <?php
  2. // 模型数据
  3. $users = [
  4. ['id'=>1, 'name'=>'admin', 'email'=>'admin@php.cn'],
  5. ['id'=>2, 'name'=>'peter', 'email'=>'peter@php.cn'],
  6. ['id'=>3, 'name'=>'jack', 'email'=>'jack@php.cn'],
  7. ];
  8. // 查询条件
  9. $id = $_GET['id'];
  10. // js回调
  11. $callback = $_GET['jsonp'];
  12. // 遍历
  13. foreach ($users as $user) {
  14. if ($user['id'] == $id) {
  15. $result = $user;
  16. break;
  17. }
  18. }
  19. // 转换格式
  20. $data = json_encode($result);
  21. // 输出
  22. echo "{$callback}({$data})";

案例总结:

  • 跨域请求的url
  • 以get方法添加查询参数,就是放在url中,以键值对方式添加每个键值对之间用&分割
  • 案例中jsonp:重点在于Url的参数中必须要有一个回调参数
  • 跨域请求的返回值,是一个js函数的语句,函数就是返回的json
  • 案例中处理返回的json数据的函数名称(show),就是跨域请求的url中的jsonp的值
批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:现在有不少原生支持跨域的api, jsonp是跨域一种解决方案... 没有完美的跨域,这个不要纠结, 每一种方式都有自己的优缺点
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学