博客列表 >想当黑客?想拿别人网站数据?实例演示jsonp跨域原理与实现...

想当黑客?想拿别人网站数据?实例演示jsonp跨域原理与实现...

张福根一修品牌运营
张福根一修品牌运营原创
2020年11月06日 16:36:13812浏览

实例演示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的值
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议