专综实例json文件数据引用

win+R ———>cmd————>监听 

在引用前前启动json-server监听:

json-server --w students.json

 students.json:

{
  "students": [
    {
      "id": 1,
      "name": "张三",
      "gender": "男",
      "birthday": "1999-05-23",
      "address": "北京市海淀区",
      "email": "zhangsan@example.com",
      "phone": "13333333333"
    },
    {
      "id": 2,
      "name": "李四",
      "gender": "女",
      "birthday": "1998-09-12",
      "address": "北京市朝阳区",
      "email": "lisi@example.com",
      "phone": "15555555555"
    },
    {
      "id": 3,
      "name": "王五",
      "gender": "男",
      "birthday": "2000-01-01",
      "address": "北京市东城区",
      "email": "wangwu@example.com",
      "phone": "17777777777"
    }
  ],
  "courses": [
    {
      "id": 1,
      "name": "计算机基础",
      "credit": 4
    },
    {
      "id": 2,
      "name": "高等数学",
      "credit": 5
    },
    {
      "id": 3,
      "name": "数据库系统",
      "credit": 3
    }
  ],
  "enrollments": [
    {
      "id": 2,
      "studentId": 1,
      "courseId": 2,
      "grade": "A"
    },
    {
      "id": 3,
      "studentId": 2,
      "courseId": 2,
      "grade": "C+"
    },
    {
      "studentId": 1,
      "courseId": 1,
      "grade": "A+",
      "id": 4
    },
    {
      "studentId": 2,
      "courseId": 3,
      "grade": "B",
      "id": 5
    }
  ]
}

监听: 

完整代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>选课数据展示</title>
  </head>
  <script src="./axios.js"></script>
  <body>
    <form style="display: flex" id="addEnrollmentForm">
      <label for="studentId">学生:</label>
      <input type="number" id="studentId" name="studentId" required />
      <label for="courseId">课程:</label>
      <input type="number" id="courseId" name="courseId" required />
      <label for="grade">成绩:</label>
      <select id="grade" name="grade" required>
        <option value="A+">A+</option>
        <option value="A">A</option>
        <option value="B">B</option>
        <option value="C">C</option>
      </select>
      <button type="submit" id="addEnrollments">新增</button>
    </form>
    <table id="enrollments">
      <thead>
        <tr>
          <th>报名ID</th>
          <th>学生ID</th>
          <th>学生姓名</th>
          <th>课程ID</th>
          <th>课程名称</th>
          <th>学分</th>
          <th>成绩</th>
          <th>操作</th>
        </tr>
      </thead>
      <tbody></tbody>
    </table>

    <script>
      const baseUrl = "http://localhost:3000/enrollments";
      // 使用js xmlhttprequest方法从json-server获取选课数据
      function getEnrollments() {
        const xhr = new XMLHttpRequest();
        const url = baseUrl + "?_expand=student&_expand=course"; // 要获取数据的URL
        xhr.open("GET", url);
        axios
          .get(url)
          .then((res) => {
            const jsonData = res.data; // 响应数据
            // const jsonData = JSON.parse(data);
            console.log(jsonData); // 打印响应数据
            const enrollmentsTable = document.getElementById("enrollments");
            enrollmentsTable.tBodies[0].innerHTML = "";
            var trs = "";
            jsonData.forEach((enrollment) => {
              // 从关联表中获取学生姓名和课程名称
              const studentId = enrollment.student.id;
              const studentName = enrollment.student.name;
              const courseId = enrollment.course.id;
              const courseName = enrollment.course.name;
              const courseCredit = enrollment.course.credit;
              // 创建一行表格,并将选课数据添加到其中
              const row = `<tr>
                                <td>${enrollment.id}</td>
                                <td>${studentId}</td>
                                <td>${studentName}</td>
                                <td>${courseId}</td>
                                <td>${courseName}</td>
                                <td>${courseCredit}</td>
                                <td>${enrollment.grade}</td>
                                <td><button class='delete' id = ${enrollment.id}>删除</button></td>
                            </tr>`;
              // 将这一行添加到表格中
              trs += row;
            });
            enrollmentsTable.tBodies[0].innerHTML = trs;
            handleOper();
          })
          .catch((err) => {
            console.error(err);
          });

        xhr.onload = function () {
          if (xhr.status === 200) {
            const data = xhr.response; // 响应数据
            const jsonData = JSON.parse(data);
            console.log(jsonData); // 打印响应数据
            const enrollmentsTable = document.getElementById("enrollments");
            enrollmentsTable.tBodies[0].innerHTML = "";
            var trs = "";
            jsonData.forEach((enrollment) => {
              // 从关联表中获取学生姓名和课程名称
              const studentId = enrollment.student.id;
              const studentName = enrollment.student.name;
              const courseId = enrollment.course.id;
              const courseName = enrollment.course.name;
              const courseCredit = enrollment.course.credit;
              // 创建一行表格,并将选课数据添加到其中
              const row = `<tr>
                                <td>${enrollment.id}</td>
                                <td>${studentId}</td>
                                <td>${studentName}</td>
                                <td>${courseId}</td>
                                <td>${courseName}</td>
                                <td>${courseCredit}</td>
                                <td>${enrollment.grade}</td>
                                <td><button class='delete' id = ${enrollment.id}>删除</button></td>
                            </tr>`;
              // 将这一行添加到表格中
              trs += row;
            });
            enrollmentsTable.tBodies[0].innerHTML = trs;
            handleOper();
          } else {
            console.log("Error:", xhr.statusText); // 打印错误信息
          }
        };
        xhr.send();
      }

      getEnrollments();

      function handleOper() {
        const delButtons = document.querySelectorAll(".delete");
        delButtons.forEach((one) => {
          one.addEventListener("click", function (e) {
            console.log(e.target);
            const id = e.target.getAttribute("id");
            const xhr = new XMLHttpRequest();
            xhr.open("delete", baseUrl + `/${id}`);
            xhr.setRequestHeader("Content-type", "application/json");
            xhr.onload = function () {
              if (xhr.status == 200) {
                console.log(xhr.responseText);
                getEnrollments();
              } else {
                console.log("post Error:", xhr.statusText); // 打印错误信息
              }
            };
            xhr.send();
          });
        });
      }

      // 增加按钮点击事件
      const addEnrollmentForm = document.getElementById("addEnrollmentForm");
      const enrollmentsTable = document.getElementById("enrollments");

      addEnrollmentForm.addEventListener("submit", (event) => {
        event.preventDefault();

        const studentId = document.getElementById("studentId").value;
        const courseId = document.getElementById("courseId").value;
        const grade = document.getElementById("grade").value;

        const xhr = new XMLHttpRequest();
        const url = baseUrl;

        xhr.open("POST", url);
        xhr.setRequestHeader("Content-Type", "application/json");
        xhr.onload = function () {
          if (xhr.status === 201) {
            console.log(xhr.responseText);
            // 重置表单
            addEnrollmentForm.reset();
            getEnrollments();
          }
        };

        xhr.send(
          JSON.stringify({
            studentId: parseInt(studentId),
            courseId: parseInt(courseId),
            grade: grade,
          })
        );
      });
    </script>
  </body>
</html>

 实现效果:

注意:一定要先启动监听,同时根据json文件中id只有1,2,3三个人的id,所以在学生id选择和课程id时不可以超过json文件里的数据,否则会破坏json 文件,如在学生id中选择-1的值就会破坏文件 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拥有冯·诺依曼的智慧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值