博客列表 >jquery中的ajax方法使用

jquery中的ajax方法使用

我是郭富城
我是郭富城原创
2020年06月09日 01:47:27916浏览

jquery中的ajax方法使用

AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML),AJAX 是与服务器交换数据的艺术,它在不重载全部页面的情况下,实现了对部分网页的更新。

1. jQuery load() 方法

jQuery load() 方法是简单但强大的 AJAX 方法。load() 方法从服务器加载数据,并把返回的数据放入被选元素中。

  1. // 1. load(): 加载html片断
  2. $("button:first-of-type").click(function () {
  3. $(this).after("<div>").next().load("nav.html");
  4. });

2. jQuery - AJAX get() 和 post() 方法

jQuery get() 和 post() 方法用于通过 HTTP GET 或 POST 请求从服务器请求数据。GET 基本上用于从服务器获得(取回)数据。POST 也可用于从服务器获取数据。不过,POST 方法不会缓存数据,并且常用于连同请求一起发送数据。

注释:GET 方法可能返回缓存数据。

  1. // 2. $.get():以get方式从服务器获取资源/数据
  2. $("button:nth-of-type(2)").click(function (ev) {
  3. // $.get(url, data, callback)
  4. $.get("users.php", { id: 2 }, function (data) {
  5. // cl(data);
  6. $(ev.target).after("<div>").next().html(data);
  7. });
  8. });
  9. // 3. $.post():以post方式从服务器获取资源/数据
  10. $("button:nth-of-type(3)").click(function (ev) {
  11. // $.post(url, data, callback)
  12. $.post("users.php", { id: 4 }, function (data) {
  13. // cl(data);
  14. $(ev.target).after("<div>").next().html(data);
  15. });
  16. });

3. $.getJSON():接口返回的大多是JSON

  1. $("button:nth-of-type(4)").click(function (ev) {
  2. // $.getJSON(url, data, callback)
  3. $.getJSON("users.php?id=2", function (data) {
  4. // 返回就是js对象了, 不必转换
  5. // cl(JSON.parse(data));
  6. cl(data);
  7. var res = data.id + ": " + data.name + ", " + data.age + "岁";
  8. $(ev.target).after("<div>").next().html(res);
  9. });
  10. });

4. $.ajax(): 终级方法

  • 语法
  1. // $.ajax({
  2. // // 请求类型
  3. // type: "GET",
  4. // // 请求的URL
  5. // url: url,
  6. // // 发送的数据
  7. // data: data,
  8. // // 期望服务器返回/响应的数据类型
  9. // dataType: "json",
  10. // // 成功时的回调函数
  11. // success: callback,
  12. // });
  1. $("button:nth-of-type(5)").click(function (ev) {
  2. $.ajax({
  3. type: "GET",
  4. url: "users.php",
  5. data: { id: 10 },
  6. dataType: "html",
  7. success: function (data) {
  8. $(ev.target).after("<div>").next().html(data);
  9. },
  10. });
  11. });

5. $.ajax()-jsonp-1:跨域请求

  1. $("button:nth-of-type(6)").click(function (ev) {
  2. $.ajax({
  3. type: "GET",
  4. url: "http://php.edu/0522/test2.php?jsonp=?&id=1",
  5. dataType: "jsonp",
  6. success: function (data) {
  7. cl(data);
  8. var data = JSON.parse(data);
  9. cl(data);
  10. var data =
  11. "<p>" +
  12. data.title +
  13. "</p><p>" +
  14. data.user.name +
  15. ", 邮箱:" +
  16. data.user.email +
  17. "</p>";
  18. $(ev.target).after("<div>").next().html(data);
  19. },
  20. });
  21. });

6. $.ajax()-jsonp-2:跨域请求

  1. $("button:last-of-type").click(function (ev) {
  2. $.ajax({
  3. type: "GET",
  4. url: "http://php.edu/0522/test2.php?jsonp=?&id=2",
  5. dataType: "jsonp",
  6. jsonpCallback: "handle",
  7. });
  8. });
  9. function handle(data) {
  10. cl(data);
  11. var data = JSON.parse(data);
  12. cl(data);
  13. var data =
  14. "<p>" +
  15. data.title +
  16. "</p><p>" +
  17. data.user.name +
  18. ", 邮箱:" +
  19. data.user.email +
  20. "</p>";
  21. $("button:last-of-type").after("<div>").next().html(data);
  22. }

7. ajax分页案例

7.1 获取数据库(原生)

  1. <?php
  2. // 1. 连接数据库
  3. $pdo = new PDO('mysql:host=localhost;dbname=php', 'root', 'root');
  4. // 2. 获取页码
  5. $page = $_POST['page'] ?? 1;
  6. // 3. 每页显示数量
  7. $num = 8;
  8. // 4. 每页显示偏移量
  9. $offset = ($page - 1) * $num;
  10. // 5. 总页数
  11. $sql = "SELECT CEIL(COUNT(`id`)/{$num}) AS `total` FROM `staffs`";
  12. // echo $sql;
  13. $pages = $pdo->query($sql)->fetch()['total'];
  14. // echo $pages;
  15. // 6. 分页数据
  16. $sql = "SELECT * FROM `staffs` LIMIT {$num} OFFSET {$offset}";
  17. $staffs = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
  18. // print_r($staffs);
  19. // ajax分页数据一定是返回二部分
  20. // 1. 总页数, 提供给前端自动生成分页条
  21. // 2. 分页数据
  22. echo json_encode(['pages' => $pages, 'staffs' => $staffs]);
  23. die;

7.2 分页数据

  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. <script src="lib/jquery-3.5.1.js"></script>
  7. <title>Ajax无刷新分页技术</title>
  8. <style>
  9. table {
  10. border-collapse: collapse;
  11. border: 1px solid;
  12. text-align: center;
  13. margin: auto;
  14. width: 500px;
  15. }
  16. table caption {
  17. font-size: 1.2rem;
  18. margin-bottom: 10px;
  19. }
  20. th,
  21. td {
  22. border: 1px solid;
  23. padding: 5px;
  24. }
  25. thead tr:first-of-type {
  26. background-color: #ddd;
  27. }
  28. p {
  29. text-align: center;
  30. }
  31. p a {
  32. text-decoration: none;
  33. border: 1px solid;
  34. padding: 0 8px;
  35. }
  36. .active {
  37. background-color: #ddd;
  38. }
  39. </style>
  40. </head>
  41. <body>
  42. <table>
  43. <caption>
  44. 员工信息表
  45. </caption>
  46. <thead>
  47. <tr>
  48. <th>id</th>
  49. <th>姓名</th>
  50. <th>年龄</th>
  51. <th>性别</th>
  52. <th>职位</th>
  53. <th>手机号</th>
  54. </tr>
  55. </thead>
  56. <tbody></tbody>
  57. </table>
  58. <!-- 分页条 -->
  59. <p></p>
  60. </body>
  61. <script>
  62. // 默认是第1页
  63. var page = 1;
  64. // 默认显示第一页,用一个函数来实现显示
  65. getPageData(page);
  66. // 分页函数
  67. function getPageData(page) {
  68. // ajax无刷新分页
  69. $.ajax({
  70. type: "post",
  71. url: "page_data.php",
  72. data: { page: page },
  73. dataType: "json",
  74. success: show,
  75. });
  76. }
  77. // 数据显示函数
  78. function show(data) {
  79. // 1. 显示表格数据
  80. console.log(data);
  81. console.log(data.pages);
  82. console.log(data.staffs);
  83. var str = "";
  84. data.staffs.forEach(function (staff) {
  85. str += "<tr>";
  86. str += "<td>" + staff.id + "</td>";
  87. str += "<td><input type='text' value=" + staff.name + "></td>";
  88. str += "<td>" + staff.age + "</td>";
  89. str += "<td>" + staff.sex + "</td>";
  90. str += "<td>" + staff.position + "</td>";
  91. str += "<td>" + staff.mobile + "</td>";
  92. str += "</tr>";
  93. });
  94. // $("tbody").append(str);
  95. $("tbody").html(str);
  96. // 2. 显示分页条
  97. var str = "";
  98. for (var i = 1; i <= data.pages; i++) {
  99. // $("<a>").attr("href", "").attr("data-index", i).html(i).appendTo("p");
  100. str += '<a href="" data-index=' + i + ">" + i + "</a>";
  101. }
  102. // 将页码添到分页条, 并将第一个置为高亮
  103. $("p").html(str).find("a").first().addClass("active");
  104. // 分页条的点击事件
  105. $("p a").click(function (ev) {
  106. // 禁用<a>的跳转默认行为
  107. ev.preventDefault();
  108. var page = $(this).attr("data-index");
  109. $("tbody").html("");
  110. getPageData(page);
  111. });
  112. }
  113. </script>
  114. </html>

总结

编写常规的 AJAX 代码并不容易,因为不同的浏览器对 AJAX 的实现并不相同,必须编写额外的代码对浏览器进行测试。不过,jQuery 团队为我们解决了这个难题,我们只需要一行简单的代码,就可以实现 AJAX 功能。

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