当前位置: 首页 > article >正文

第一个AJAX调用XMLHttpRequest

第一个AJAX调用XMLHttpRequest

  • 创建对象,用于浏览器和服务器的通信,不需要刷新浏览器
const request = new XMLHttpRequest();
  • 通过GET请求方式在API中请求数据
request.open('GET', 'https://restcountries.com/v3.1/name/Russia');

在这里插入图片描述

注:我这里的API是在GitHub中找的,大家也可以找类似的API使用

上面API有讲解如何去请求数据

  • 然后就发送请求,之后直接打印响应的文本看一下是否可以请求到数据
request.send();
console.log(request.responseText);
  • 当然请求是异步的,上面可能会由于数据没有准备好等请求返回不了我们想要的,所以使用load来监听数据的介绍js
request.addEventListener('load', function () {
  console.log(request.responseText);
});

在这里插入图片描述

  • 之后我们在浏览器测试一下数据是否可以正常接收,返回的数据是以json的格式返回的,我们将其转换为JavaScript对象的形式,当然现在都是JSON的方式来返回数据,XML格式已经过时淘汰了
request.addEventListener('load', function () {
  const data = JSON.parse(this.responseText);
  console.log(data);

之后我们编写一个HTML模版,之后会以卡片的形式来展现的网页中

这里先看一下,我们预设的HTML代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <link rel="stylesheet" href="style.css" />
    <script defer src="script.js"></script>
    <title>异步 JavaScript</title>
  </head>
  <body>
    <main class="container">
      <div class="countries">
        <!--
        <article class="country">
          <img class="country__img" src="" />
          <div class="country__data">
            <h3 class="country__name">COUNTRY</h3>
            <h4 class="country__region">REGION</h4>
            <p class="country__row"><span>👫</span>POP people</p>
            <p class="country__row"><span>🗣️</span>LANG</p>
            <p class="country__row"><span>💰</span>CUR</p>
          </div>
        </article>
        -->
      </div>
      <!-- <button class="btn-country">Where am I?</button> -->
      <div class="images"></div>
    </main>
  </body>
</html>

这里注释的代码就是我们要插入的HTML模版

  • 现在我们就开始制作HTML模板
    const html = `
     <article class="country">
          <img class="country__img" src=${data[0].flags.png} />
          <div class="country__data">
            <h3 class="country__name">${data[0].name.common}</h3>
            <h4 class="country__region">${data[0].region}</h4>
            <p class="country__row"><span>👫</span>${(
              data[0].population / 1000000
            ).toFixed(0)} people</p>
            <p class="country__row"><span>🗣️</span>${data[0].languages.rus}</p>
            <p class="country__row"><span>💰</span>${
              data[0].currencies.RUB.name
            }</p>
          </div>
        </article>`;
  });

其中的参数来JavaScript对象找就行,很简单,这里不做详细赘述

  • 然后我们将我们的模板插入到HTML代码中
 countriesContainer.insertAdjacentHTML('beforeend', html);
 countriesContainer.style.opacity = 1;

css的预设代码如下

* {
  margin: 0;
  padding: 0;
  box-sizing: inherit;
}

html {
  font-size: 62.5%;
  box-sizing: border-box;
}

body {
  font-family: system-ui;
  color: #555;
  background-color: #f7f7f7;
  min-height: 100vh;

  display: flex;
  align-items: center;
  justify-content: center;
}

.container {
  display: flex;
  flex-flow: column;
  align-items: center;
}

.countries {
  /* margin-bottom: 8rem; */
  display: flex;

  font-size: 2rem;
  opacity: 0;
  transition: opacity 1s;
}

.country {
  background-color: #fff;
  box-shadow: 0 2rem 5rem 1rem rgba(0, 0, 0, 0.1);
  font-size: 1.8rem;
  width: 30rem;
  border-radius: 0.7rem;
  margin: 0 3rem;
  /* overflow: hidden; */
}

.neighbour::before {
  content: 'Neighbour country';
  width: 100%;
  position: absolute;
  top: -4rem;

  text-align: center;
  font-size: 1.8rem;
  font-weight: 600;
  text-transform: uppercase;
  color: #888;
}

.neighbour {
  transform: scale(0.8) translateY(1rem);
  margin-left: 0;
}

.country__img {
  width: 30rem;
  height: 17rem;
  object-fit: cover;
  background-color: #eee;
  border-top-left-radius: 0.7rem;
  border-top-right-radius: 0.7rem;
}

.country__data {
  padding: 2.5rem 3.75rem 3rem 3.75rem;
}

.country__name {
  font-size: 2.7rem;
  margin-bottom: 0.7rem;
}

.country__region {
  font-size: 1.4rem;
  margin-bottom: 2.5rem;
  text-transform: uppercase;
  color: #888;
}

.country__row:not(:last-child) {
  margin-bottom: 1rem;
}

.country__row span {
  display: inline-block;
  margin-right: 2rem;
  font-size: 2.4rem;
}

.btn-country {
  border: none;
  font-size: 2rem;
  padding: 2rem 5rem;
  border-radius: 0.7rem;
  color: white;
  background-color: orangered;
  cursor: pointer;
}

.images {
  display: flex;
}

.images img {
  display: block;
  width: 80rem;
  margin: 4rem;
}

.images img.parallel {
  width: 40rem;
  margin: 2rem;
  border: 3rem solid white;
  box-shadow: 0 2rem 5rem 1rem rgba(0, 0, 0, 0.1);
}
  • 之后就能将漂亮的表格输出出来了
    在这里插入图片描述

目前我们是通过硬编码的方式传入国家的名称,我们可以通过函数的方式来调用

'use strict';

const btn = document.querySelector('.btn-country');
const countriesContainer = document.querySelector('.countries');

///
const getCountrydata = function (country) {
  const request = new XMLHttpRequest();
  request.open('GET', `https://restcountries.com/v3.1/name/${country}`);
  request.send();

  request.addEventListener('load', function () {
    const data = JSON.parse(this.responseText);
    console.log(data);
    const html = `
     <article class="country">
          <img class="country__img" src=${data[0].flags.png} />
          <div class="country__data">
            <h3 class="country__name">${data[0].name.common}</h3>
            <h4 class="country__region">${data[0].region}</h4>
            <p class="country__row"><span>👫</span>${(
              data[0].population / 1000000
            ).toFixed(0)} people</p>
            <p class="country__row"><span>🗣️</span>${data[0].languages.rus}</p>
            <p class="country__row"><span>💰</span>${
              data[0].currencies.RUB.name
            }</p>
          </div>
        </article>`;
    countriesContainer.insertAdjacentHTML('beforeend', html);
    countriesContainer.style.opacity = 1;
  });
};

getCountrydata('us');

这里和上面的显示画面是一样的


http://www.kler.cn/a/446933.html

相关文章:

  • 基于字节大模型的论文翻译(含免费源码)
  • 数据分析实战—鸢尾花数据分类
  • YOLOv8目标检测(七)_AB压力测试
  • 使用Python实现量子通信模拟:探索安全通信的未来
  • MySQL数据库——门诊管理系统数据库数据表
  • Vue3 的 Teleport 是什么?在什么场景下会用到?
  • 如何在自己的云服务器上部署mysql
  • Ubuntu开启远程root用户权限
  • AR眼镜制备的步骤与关键技术
  • STL格式转换为OBJ格式
  • 【Django】测试带有 CSRF 验证的 POST 表单 API 报错:Forbidden (CSRF cookie not set.)
  • vscode中同时运行两个python文件(不用安装插件)
  • 服务器防火墙设置某个端口号只允许固定 ip地址访问
  • 游戏之登录排队系统及防刷
  • 电脑excel词典(xllex.dll)文件丢失是或损坏是什么原因?“xllex.dll文件缺失“要怎么解决?
  • flask-admin的modelview 实现list列表视图中某个列字段值翻译
  • C# 23种设计模式(5)命令模式(Command Pattern)
  • xterm.js结合websocket实现web ssh
  • 如何使用whisper+ollama+ffmpeg为视频添加中文字幕
  • Suno Api V4模型无水印开发「获取整首歌」 —— 「Suno Api系列」第5篇
  • 单片机MQTT通信
  • 阿里云pytorch gpu镜像下载!最快!!
  • 相机与NAS的奇妙组合,如何使用相机拍照自动上传或备份到NAS
  • LEAST-TO-MOST PROMPTING ENABLES COMPLEX REASONING IN LARGE LANGUAGE MODELS---正文
  • 分布式数据库 OceanBase 的前世今生
  • 文件解析漏洞