博客列表 >Ajax无刷新上传

Ajax无刷新上传

暝皑祯π_π
暝皑祯π_π原创
2020年05月26日 18:16:18847浏览

login.php

  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. <style>
  8. form {
  9. background-color: aqua;
  10. display: grid;
  11. gap: 15px;
  12. width: 200px;
  13. padding: 20px;
  14. border-radius: 15px;
  15. margin: auto;
  16. }
  17. </style>
  18. </head>
  19. <body>
  20. <nav></nav>
  21. <form action="" method="POST" onsubmit="return false">
  22. <div>
  23. <label for="email">名称:</label>
  24. <input
  25. type="email"
  26. name="email"
  27. placeholder="请输入"
  28. required
  29. autofocus
  30. />
  31. </div>
  32. <div>
  33. <label for="password">密码:</label>
  34. <input type="password" name="password" placeholder="******" required />
  35. </div>
  36. <div>
  37. <button>登录</button>
  38. </div>
  39. </form>
  40. </body>
  41. <script src="login.js"></script>
  42. </html>

login.js

  1. // 获取form表单
  2. var form = document.querySelector("form");
  3. var but = document.querySelector("form button");
  4. but.onclick = function () {
  5. // 1. 创建Ajax对象
  6. var xhr = new XMLHttpRequest();
  7. // 2. 监听请求
  8. xhr.onreadystatechange = function () {
  9. if (xhr.readyState === 4 && xhr.status === 200) {
  10. console.log(xhr.responseText);
  11. // 将jsonl转js对象
  12. var res = JSON.parse(xhr.responseText);
  13. // console.log(res);
  14. switch (res.status) {
  15. case 0:
  16. case 1:
  17. dates = res.message;
  18. break;
  19. default:
  20. error = "未知错误";
  21. }
  22. // 将提示显示到表单中
  23. var span = document.createElement("span");
  24. span.innerHTML = dates;
  25. span.style.color = "red";
  26. form.appendChild(span);
  27. }
  28. };
  29. // 3. 初始化请求参数
  30. xhr.open("POST", "Ajax.php", true);
  31. // FormData
  32. var data = new FormData(form);
  33. data.append("login_time", new Date().getTime());
  34. // 5. 发送请求
  35. xhr.send(data);
  36. };
  37. // 清除提示信息
  38. var inputs = document.querySelectorAll("input");
  39. for (var i = 0; i < inputs.length; i++) {
  40. inputs[i].oninput = function () {
  41. if (but.nextElementSibling !== null)
  42. form.removeChild(but.nextElementSibling);
  43. };
  44. }

Ajax.php

  1. <?php
  2. session_start();
  3. // 拿到前端数据
  4. // echo $_POST['email'];
  5. // echo $_POST['password'];
  6. // 连接数据库
  7. $pdo = new PDO("mysql:host=js.cn;dbname=php","root","root");
  8. // 查询数据库中保存的用户信息
  9. $stmt = $pdo->prepare("SELECT * FROM `users`");
  10. $stmt->execute();
  11. $statues = $stmt->fetchall(PDO::FETCH_ASSOC);
  12. // print_r($statues) ;
  13. // 判断请求是否 正确
  14. if($_SERVER['REQUEST_METHOD'] === 'POST'){
  15. // 获取需要验证的信息
  16. $email = $_POST['email'];
  17. $password = md5($_POST['password']);
  18. $results = array_filter($statues, function($statue) use ($email, $password) {
  19. return $statue['email'] === $email && $statue['password'] === $password; //&&:且
  20. });
  21. // count:计算数组的单元数目
  22. // 如果results === 1;说明用户存在
  23. if (count($results) === 1) {
  24. $_SESSION['user'] = serialize(array_pop($results));
  25. echo json_encode(['status'=>1, 'message'=>'验证通过']);
  26. } else {
  27. echo json_encode(['status'=>0, 'message'=>'邮箱或密码错误']);
  28. }
  29. }

Ajax:getpost

  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>Document</title>
  7. </head>
  8. <body>
  9. <script>
  10. // GET请求
  11. // 创建Ajax对象
  12. var xhr = new XMLHttpRequest();
  13. // 监听请求回调
  14. xhr.onreadystatechange = function () {
  15. if (xhr.readyState == 4 && xhr.status == 200) {
  16. console.log(xhr.responseText);
  17. }
  18. };
  19. // 初始化请求参数
  20. xhr.open("get", "test8.php", true);
  21. // 发送请求
  22. xhr.send(null);
  23. // 第一种POST请求
  24. // 创建Ajax对象
  25. var xhr = new XMLHttpRequest();
  26. // 监听请求回调
  27. xhr.onreadystatechange = function () {
  28. if (xhr.readyState == 4 && xhr.status == 200) {
  29. console.log(xhr.responseText);
  30. }
  31. };
  32. // 初始化请求参数
  33. xhr.open("post", "test6.php", true);
  34. // 设置请求头:说明我要发送的是什么类型的数据
  35. xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
  36. // 要发送的数据
  37. var user = {
  38. email: "php@qq.com",
  39. password: "123456",
  40. };
  41. // 将数据进行josn序列化
  42. var date = JSON.stringify(user);
  43. // 发送请求
  44. xhr.send(date);
  45. // 第二种post请求
  46. // 通过请求头的设置,直接把发送的进行序列化发送,php免去反序列化的步骤,利用php://input接受数据
  47. // 创建Ajax对象
  48. var xhr = new XMLHttpRequest();
  49. // 监听请求回调
  50. xhr.onreadystatechange = function () {
  51. if (xhr.readyState == 4 && xhr.status == 200) {
  52. console.log(xhr.responseText);
  53. }
  54. };
  55. // 初始化请求参数
  56. xhr.open("post", "test6.php", true);
  57. // 设置请求头:说明我要发送的是什么类型的数据
  58. xhr.setRequestHeader("content-type", "application/json;charset=utf-8");
  59. // 要发送的数据
  60. var user = {
  61. email: "html@qq.com",
  62. password: "123456",
  63. };
  64. // 将数据进行josn序列化
  65. var date = JSON.stringify(user);
  66. // 发送请求
  67. xhr.send(date);
  68. </script>
  69. </body>
  70. </html>

总结

  • 把通过 按钮提交的表单信息同Ajax的方式进行提交,可以实现无刷新显示页面。
  • Ajax的两种请求方式
    • 1 GET
    • 2 POST
    • POS可以通过不同的请求头设置不同的提交数据类型
上一条:DOM操作下一条:MySQL创建定时任务
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议