原生js中的Ajax及使用

1、什么是Ajax

 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

是指一种创建交互式网页应用的网页开发技术,用于浏览器和服务器之间进行数据交互。

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

2、Ajax的基本使用 

使用Ajax无外乎就是以下四个步骤:

1.创建一个http请求实例对象

2.打开连接

3.发送请求

4.处理响应

     2.1 向服务器发送请求

XMLHttpRequest 对象用于和服务器交换数据。

如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法。

open()方法:

    open(method,url,async)

  • method:请求的类型;GET 或 POST
  • url:文件在服务器上的位置
  • async:true(异步)或 false(同步)

send()方法: 

    send(string)

     将请求发送到服务器。

  • string:仅用于 POST 请求

     2.2 处理响应

onreadystatechange 事件

当请求被发送到服务器时,我们需要执行一些基于响应的任务。

每当 readyState 改变时,就会触发 onreadystatechange 事件。

readyState

存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

  • 0: 请求未初始化
  • 1: 服务器连接已建立
  • 2: 请求已接收
  • 3: 请求处理中
  • 4: 请求已完成,且响应已就绪
status200: "OK"
500: 未找到页面

 发送请求时分为get不携带参数,get携带参数,post携带参数

1.get不携带参数

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Ajax</title>
</head>

<body>

</body>
<script>
  // 1.创建一个http请求实例对象
  var httpRequest = new XMLHttpRequest();
  // 2.打开http连接
  httpRequest.open('get', 'url相应的地址');
  // 3.发起请求
  httpRequest.send();
  // 4.处理响应
  httpRequest.onreadystatechange = function () {
    // httpRequest.readyState === 4 代表http请求完成
    // httpRequest.status === 200 代表请求成功了
    if (httpRequest.readyState === 4 && httpRequest.status === 200) {
      // 获取响应里的数据
      console.log(httpRequest.responseText);
    }
    if (httpRequest.readyState === 4 && httpRequest.status === 500) {
      // 获取响应里的数据
      console.log("错误" + httpRequest.responseText);
    }
  }
</script>

</html>

 2.get携带参数

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Ajax</title>
  <script src="https://cdn.bootcdn.net/ajax/libs/qs/6.10.1/qs.min.js"></script>
</head>

<body>

</body>
<script>
  // 1.创建一个http请求实例对象
  var httpRequest = new XMLHttpRequest();
  var obj = {
    page: 1,
    pageSize: 10,
  }
  // 将js对象转为查询字符串,Qs.stringify()
  var qs = Qs; //第三方库 
  var stringObj = qs.stringify(obj);
  // 2.打开http连接
  httpRequest.open('get', 'url对应的地址?' + stringObj);
  // 3.发起请求
  httpRequest.send();
  // 4.处理响应
  httpRequest.onreadystatechange = function () {
    // httpRequest.readyState === 4 代表http请求完成
    // httpRequest.status === 200 代表请求成功了
    if (httpRequest.readyState === 4 && httpRequest.status === 200) {
      // 获取响应里的数据
      console.log(httpRequest.responseText);
    }
    if (httpRequest.readyState === 4 && httpRequest.status === 500) {
      // 获取响应里的数据
      console.log("错误" + httpRequest.responseText);
    }
  }
</script>

</html>

 3.post携带参数

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Ajax</title>
</head>

<body>

</body>
<script>
  // 用户登录
  // 输入用户名 密码 到后台校验
  // 后台校验成功后 会返回一个令牌 
  // 用户再次访问 携带令牌即可
  // 后台可以通过令牌去判断
  // 登录时间 30 那我后台直接将令牌失效 你需要重新登录
  
  // 1.创建一个http请求实例对象
  var httpRequest = new XMLHttpRequest();
  var obj = {
    username: 'admin1',
    password: '123321',
  }
  // 2.打开http连接
  httpRequest.open('post', 'url对应的地址');
  // 配置post请求 数据格式
  httpRequest.setRequestHeader("Content-Type", "application/json")
  // 3.发起请求
  // post的参数放到send中
  httpRequest.send(JSON.stringify(obj));
  // 4.处理响应
  httpRequest.onreadystatechange = function () {
    // httpRequest.readyState === 4 代表http请求完成
    // httpRequest.status === 200 代表请求成功了
    if (httpRequest.readyState === 4 && httpRequest.status === 200) {
      // 获取响应里的数据
      console.log(httpRequest.responseText);
    }
    if (httpRequest.readyState === 4 && httpRequest.status === 500) {
      // 获取响应里的数据
      console.log("错误" + httpRequest.responseText);
    }
  }
</script>

</html>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值