博客列表 >Ajax和JSON(0812)

Ajax和JSON(0812)

丶久而旧之丶
丶久而旧之丶原创
2020年09月18日 15:54:31622浏览

Ajax和json

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>Document</title>
  7. </head>
  8. <body>
  9. <ul>
  10. <li></li>
  11. <li></li>
  12. <li></li>
  13. </ul>
  14. <script>
  15. // 将json字符串转为js对象
  16. // 多行字符串需要加入'\'
  17. var js1 = '{\
  18. "name":"admin",\
  19. "age":20,\
  20. "like":"打篮球"\
  21. }';
  22. var obj = JSON.parse(js1);
  23. console.log(obj);
  24. var lis = document.querySelector('li:first-of-type');
  25. lis.innerHTML = obj.name;
  26. var lis1 = document.querySelector('li:nth-of-type(2)');
  27. lis1.innerHTML = obj.age;
  28. var lis2 = document.querySelector('li:last-of-type');
  29. lis2.innerHTML = obj.like;
  30. var str = '{\
  31. "name": "admin",\
  32. "age": 20,\
  33. "marriage": true,\
  34. "course": {\
  35. "name": "php",\
  36. "grade": 90\
  37. }\
  38. }';
  39. // parse可以转入参数对转换数据进行处理
  40. var obj = JSON.parse(str, function (key, value) {
  41. if (key === "marriage") {
  42. return '不要再来骚扰我了';
  43. }
  44. return value;
  45. });
  46. console.log(obj);
  47. var pe = {
  48. name: obj.name,
  49. age: obj.age,
  50. courseName: obj.course.name,
  51. courseGrade: obj.course.grade,
  52. };
  53. console.log(pe);
  54. // 渲染到页面
  55. var ul = document.createElement("ul");
  56. var li = "";
  57. for (var key in pe) {
  58. li += "<li>" + pe[key] + "</li>";
  59. }
  60. console.log(li);
  61. ul.innerHTML = li;
  62. // 插入到页面中
  63. document.body.appendChild(ul);
  64. </script>
  65. </body>
  66. </html>

Ajax

GET方式

  1. var btn = document.querySelector('button');
  2. btn.addEventListener('click', get, false);
  3. function get() {
  4. // GET请求
  5. // 1.创建ajax对象
  6. var aj = new XMLHttpRequest();
  7. // 2.监听请求
  8. aj.onreadystatechange = function () {
  9. if (aj.readyState === 4 && aj.status === 200) {
  10. console.log(aj.responseText);
  11. // 凡是涉及页面DOM操作都放在监听请求中
  12. var obj = JSON.parse(aj.responseText);
  13. console.log(obj);
  14. document.querySelector('p:first-of-type').innerHTML = obj.name;
  15. document.querySelector("p:nth-of-type(2)").innerHTML = obj.age;
  16. document.querySelector("p:last-of-type").innerHTML = obj.course;
  17. }
  18. };
  19. // 3.初始化请求参数
  20. // open(请求类型,请求的URL地址,是否异步/默认异步)
  21. aj.open("GET", "0812.php?id=2");
  22. // 4.发送请求(get方式没有请求参数)
  23. aj.send(null);
  24. }

php代码

  1. <?php
  2. $users = [
  3. ['id' => 1, 'name' => 'admin', 'age' => 18, 'course' => 'PHP'],
  4. ['id' => 2, 'name' => 'useradmin', 'age' => 20, 'course' => 'JAVA'],
  5. ];
  6. $id = $_GET['id'];
  7. foreach ($users as $value) {
  8. if ($value['id'] == $id) {
  9. echo json_encode($value);
  10. }
  11. }

POST方式

方式1

  1. var btn = document.querySelector('button');
  2. btn.addEventListener('click', get, false);
  3. function get() {
  4. // POST请求
  5. // 1.创建ajax对象
  6. var aj = new XMLHttpRequest();
  7. // 2.监听请求
  8. aj.onreadystatechange = function () {
  9. if (aj.readyState === 4 && aj.status === 200) {
  10. console.log(aj.responseText);
  11. }
  12. };
  13. // 3.初始化请求参数
  14. // open(请求类型,请求的URL地址,是否异步/默认异步)
  15. aj.open("POST", "0812.php");
  16. // 4.设置请求头(用键值对模拟表单方式发送数据)
  17. aj.setRequestHeader("content-type", "application/x-www-form-urlencoded");
  18. // 准备数据(可以写入对象通过方法转换为json字符串后再发送)
  19. var user = {
  20. name: "admin",
  21. password: "123456",
  22. };
  23. var date = JSON.stringify(user);
  24. // 5.发送请求(可以手工加入键)
  25. aj.send("user=" + date);
  26. }

PHP代码

  1. print_r($_POST);
  2. $user = json_decode($_POST['user']);
  3. echo $user->name . ":" . sha1($user->password);

POST方式2

  1. // POST方式2(直接发送json字符串)
  2. var btn = document.querySelector('button');
  3. btn.addEventListener('click', get, false);
  4. function get() {
  5. // POST请求
  6. // 1.创建ajax对象
  7. var aj = new XMLHttpRequest();
  8. // 2.监听请求
  9. aj.onreadystatechange = function () {
  10. if (aj.readyState === 4 && aj.status === 200) {
  11. console.log(aj.responseText);
  12. }
  13. };
  14. // 3.初始化请求参数
  15. // open(请求类型,请求的URL地址,是否异步/默认异步)
  16. aj.open("POST", "0812.php");
  17. // 4.设置请求头
  18. // 直接把请求头内容设置为json
  19. aj.setRequestHeader("content-type", "application/json;charset=utf-8");
  20. // 准备数据(可以写入对象通过方法转换为json字符串后再发送)
  21. var user = {
  22. name: "admin",
  23. password: "123456",
  24. };
  25. var date = JSON.stringify(user);
  26. // 5.发送请求
  27. aj.send(date);
  28. }

php代码

  1. // POST方式2
  2. // 前端不是通过模拟表单进行发送那么用$_POST里面就没有数据需要在输入流中获取数据
  3. $data = file_get_contents("php://input");
  4. // 然后解析json
  5. $user = json_decode($data);
  6. echo $user->name . ':' . $user->password;

POST方式3(使用表单对象/推荐)

  1. var btn = document.querySelector('button');
  2. btn.addEventListener('click', get, false);
  3. function get() {
  4. // POST请求
  5. // 1.创建ajax对象
  6. var aj = new XMLHttpRequest();
  7. // 2.监听请求
  8. aj.onreadystatechange = function () {
  9. if (aj.readyState === 4 && aj.status === 200) {
  10. console.log(aj.responseText);
  11. }
  12. };
  13. // 3.初始化请求参数
  14. // open(请求类型,请求的URL地址,是否异步/默认异步)
  15. aj.open("POST", "0812.php");
  16. // 4.使用FormData对象发送数据
  17. var date = new FormData();
  18. // 向对象中添加数据
  19. date.append("name", "admin");
  20. date.append("password", "789456");
  21. // 5.发送请求
  22. aj.send(date);
  23. }

php代码

  1. // POST方式3
  2. print_r($_POST);

Ajax-FormData-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>Ajax案例演示</title>
  7. </head>
  8. <body>
  9. <form method="POST" onsubmit="return false">
  10. <input type="email" name="email" placeholder='exam@email.com' required autofocus>
  11. <input type="password" name="password" placeholder='请输入密码' required>
  12. <button>登录</button>
  13. </form>
  14. <script>
  15. // 获取元素
  16. var form = document.querySelector('form');
  17. var btn = document.querySelector('form>button');
  18. // 2.给按钮绑定事件
  19. btn.onclick = function () {
  20. // 1.创建ajax对象
  21. var aj = new XMLHttpRequest();
  22. // 2.监听请求
  23. aj.onreadystatechange = function () {
  24. if (aj.readyState === 4 && aj.status === 200) {
  25. // console.log(aj.responseText);
  26. var obj = JSON.parse(aj.responseText);
  27. console.log(obj);
  28. var p = document.createElement('p');
  29. switch (obj.status) {
  30. case 1:
  31. error = obj.message;
  32. p.style.color = "green";
  33. break;
  34. case 2:
  35. error = obj.message;
  36. p.style.color = "red";
  37. break;
  38. default:
  39. error = '未知错误';
  40. }
  41. p.innerHTML = error;
  42. form.appendChild(p);
  43. }
  44. }
  45. // 3.初始化请求参数
  46. aj.open("POST", "0812.php");
  47. // 4.使用FormData对象组织数据,最终以表单数据方式发送
  48. var data = new FormData(form);
  49. // data.append("email", form.email.value);
  50. // data.append("password", form.password.value);
  51. // 5.发送请求
  52. aj.send(data);
  53. };
  54. </script>
  55. </body>
  56. </html>

php代码

  1. $user = ["email" => "mingzi@qq.com", "password" => "123456"];
  2. $email = $_POST['email'];
  3. $password = $_POST['password'];
  4. if ($email == $user['email'] && $password == $user['password']) {
  5. echo json_encode(["status" => 1, "message" => "验证通过"]);
  6. } else {
  7. echo json_encode(["status" => 2, "message" => "邮箱或者密码错误"]);
  8. }

总结

1.了解了异步请求的执行流程
2.有个疑问 后端返回的数据一定要通过JSON字符串返回前端,前端才能调用是吗

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