博客列表 >jsonp案例根据id获取商品信息,自定义点击事件代理案例-js-40课8.14

jsonp案例根据id获取商品信息,自定义点击事件代理案例-js-40课8.14

希望
希望原创
2020年08月15日 16:52:10643浏览

一、jsonp案例根据id获取商品信息

1.创建demo4.html

  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. </head>
  8. <body>
  9. <button>跨域请求-JSONP</button>
  10. <script>
  11. function handle(data) {
  12. // console.log(data);
  13. // 转为对象
  14. var obj = JSON.parse(data);
  15. console.log(obj);
  16. // 渲染到页面中
  17. var ul = document.createElement("ul");
  18. ul.innerHTML += "<li>" + obj.title + "</li>";
  19. ul.innerHTML += "<li>" + obj.user.name + "</li>";
  20. ul.innerHTML += "<li>" + obj.user.price + "</li>";
  21. // 把列表插入到页面中
  22. document.body.appendChild(ul);
  23. }
  24. var btn = document.querySelector("button");
  25. btn.addEventListener("click", function () {
  26. // 动态生成script标签,发起jsonp请求
  27. var script = document.createElement("script");
  28. // url中的最后一个键值对,必须是一个回调,此处拿id为2的
  29. script.src = "http://php.io/test2.php?id=2&jsonp=handle";
  30. document.head.appendChild(script);
  31. });
  32. </script>
  33. </body>
  34. </html>

2.涉及到跨域,php.io文件夹下面的test2.php,在0814目录下依次创建,以下是test2.php代码

  1. <?php
  2. header('content-type:text/html;charset=utf-8');
  3. // id: 查询参数,这是可选,get获取
  4. $id = $_GET['id'];
  5. // 前端的回调函数的名称[必选],[对应jsonp=handle的jsonp]
  6. $callback = $_GET['jsonp'];
  7. // script.src = "http://php.io/test2.php?id=2&jsonp=handle";
  8. // 模拟接口数据,根据查询条件返回不同的值
  9. // 这个数组有三个元素,每个元素是字符串,字符串的内容是json格式的数据
  10. $users = [
  11. 0=>'{"name":"手机", "price":"6000元"}',
  12. 1=>'{"name":"电脑", "price":"8000元"}',
  13. 2=>'{"name":"手表", "price":"10000元"}'
  14. ];
  15. if (array_key_exists(($id-1), $users)) {
  16. // 查询结果保存到变量$user中
  17. $user = $users[$id-1];
  18. }
  19. // 返回前端给回调的参数是一个json格式的数据
  20. $json = '{
  21. "title": "商品信息",
  22. "user": ' . $user . '
  23. }';
  24. // 生成js函数的调用语句
  25. echo $callback .' (' . json_encode($json) . ')';

二、自定义点击事件代理案例

  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>事件点击案例</title>
  7. </head>
  8. <body>
  9. <button>点击广告</button>
  10. <script>
  11. // 获取按钮
  12. var btn = document.querySelector("button");
  13. // 事件监听
  14. btn.addEventListener("click", function () {
  15. console.log("广告被点击了");
  16. });
  17. // 事件派发,自动点击
  18. setInterval(function () {
  19. var event = new Event("click");
  20. btn.dispatchEvent(event);
  21. }, 1000);
  22. </script>
  23. </body>
  24. </html>
  • 总结:
  • 跨域:跨越不同的域名/网站的访问资源
  • 同源策略:
  • 页面 URL 中的三要素完全相同,就认为同源
    • 协议(http/https/ftp/…)相同
    • 域名domain相同
    • 端口port相同
    • JSONP:针对 get 请求
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议