AJAX详解

1:什么是ajax?

 AJAX即“Asynchronous Javascript And XML”(异步的JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,用于浏览器和服务器之间进行数据交互。  

 

对AJAX的印象:
AJAX是异步的JavaScript和XML;
AJAX是一种用于创建更好更快以及交互性更强的Web应用程序的技术;
AJAX是一种独立于Web服务器软件的浏览器技术;
AJAX不是一种新的编程语言,而是一种技术;
AJAX 使用 JavaScript 在 web 浏览器与 web 服务器之间来发送和接收数据(前端后端交互);
AJAX在浏览器与Web服务器之间使用异步数据传输(HTTP请求)。

 2:AJAX同步请求与异步请求

2.1:ajax同步请求

同步请求即是当前发出请求后,浏览器什么都不能做,必须得等到请求完成返回数据之后,才会执行后续的代码,相当于是排队,也就是说,当JS代码加载到当前ajax的时候会把页面里所有的代码停止加载,页面处于一个假死状态,当这个ajax执行完毕后才会继续运行其他代码页面解除假死状态。

2.2:ajax异步请求

 异步请求就当发出请求的同时,浏览器可以继续做任何事,Ajax发送请求并不会影响页面的加载与用户的操作,相当于是在两条线上,各走各的,互不影响。一般默认值为true。异步请求可以完全不影响用户的体验效果,无论请求的时间长或者短,用户都在专心的操作页面的其他内容,并不会有等待的感觉。

 3:AJAX的使用

 1.创建XMLHttpRequest对象

  var request = new XMLHttpRequest()

2.使用open方法设置和服务器的交互信息

  // 1.创建XMLHttpRequest对象
      var request = new XMLHttpRequest()
      // 2.配置请求方式,设置请求接口地址
      // 使用open方法设置和服务器的交互信息
      request.open('get', 'http://121.4.83.32:7004/carousel/findAll')

3:设置requestHeader()

 request.setRequestHeader(属性名称, 属性值);

发送json格式数据

request.setRequestHeader('Content-type', 'application/json; charset=utf-8');

发送表单数据

request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=utf-8');

发送纯文本(不指定Content-type时,此是默认值)

request.setRequestHeader('Content-type', 'text/plain; charset=utf-8');

发送html文本

request.setRequestHeader('Content-type', 'text/html; charset=utf-8');
 // 1.创建XMLHttpRequest对象
      var request = new XMLHttpRequest()
      // 2.配置请求方式,设置请求接口地址
      // 使用open方法设置和服务器的交互信息
      request.open('get', 'http://121.4.83.32:7004/carousel/findAll')
      // 3.设置请求头的格式
      // 设置requestHeader()

4:发送请求

    // 1.创建XMLHttpRequest对象
      var request = new XMLHttpRequest()
      // 2.配置请求方式,设置请求接口地址
      // 使用open方法设置和服务器的交互信息
      request.open('get', 'http://121.4.83.32:7004/carousel/findAll')
      // 3.设置请求头的格式
      // 设置requestHeader()
      // 4.发送请求
      request.send()

5.获取网络请求返回的数据

readystatechange 请求状态改变事件

当readyState值改变为4或服务器的响应完成时,所有的浏览器都触发该事件

function getData() {
      // 1.创建XMLHttpRequest对象
      var request = new XMLHttpRequest()
      // 2.配置请求方式,设置请求接口地址
      // 使用open方法设置和服务器的交互信息
      request.open('get', 'http://121.4.83.32:7004/carousel/findAll')
      // 3.设置请求头的格式
      // 设置requestHeader()
      // 4.发送请求
      request.send()
      // 5.获取网络请求返回的数据
      request.onreadystatechange = function () {
        if (request.readyState === 4 && request.status === 200) {
          console.log(JSON.parse(request.responseText));
          var res = JSON.parse(request.responseText)
          // DOM
          // 创建节点
          for (var index in res.data) {
            var div = document.createElement('div')
            // 数据赋值
            // 将节点添加到DOM结构中
            div.innerHTML = res.data[index].introduce
            document.body.appendChild(div)
          }
        }
      }
    }
      readyStateChange 事件是专⻔用来监听 ajax 对象的 readyState 值改变的的行为
      简单来说就是只要当 readyState 的值发生变化了,那么就会触发该事件
      所以我们在readyStateChange 事件中来监听 ajax 的 readyState 是不是到 4 了
      //  readyState === 0 : 表示未初始化完成,这时候 open 方法还没有执行 
      //  readyState === 1 : 表示配置信息已经完成,表示执行完 open 之后 
      //  readyState === 2 : 表示 send 方法已经执行完成
      //  readyState === 3 : 表示正在解析响应内容
      //  readyState === 4 : 表示响应内容已经解析完毕,可以在客户端使用了

 JSON.stringify()用于从一个对象解析出字符串

  console.log(JSON.stringify({
            "a": "1",
            "b": "2"
        })); //{"a":"1","b":"2"}

 parse用于从一个字符串中解析出json对象

 var str = '{"a":"1","b":"2"}';
        console.log(JSON.parse(str)); //{a: '1', b: '2'}

 6:响应解码 MIME-TYPE

1.MIME类型为text/plain,text/html,text/css 文本类型时,可以使用responseText属性解析

2.MIME类型为XML文档类型时,使用responseXML属性解析

3.如果服务器发送对象,数组这样的结构化数据作为其响应,他应该传输JSON编码的字符串数据。通过responseText接受到它,可以把它传递给JSON.parse()方法来解析。

 7:get有参请求

get 请求的参数就直接在 url 后面进行拼接就可以

 <!-- 引入qs -->
  <script src="./qs.js"></script>
<!-- 输入框 -->
  <input type="text" name="" id="inp">
  <!-- 获取数据的按钮 -->
  <button onclick="getWeatherData()">获取天气数据</button>
 <script>
    // 获取用户输入的值
    var inp = document.getElementById('inp')
    var cityName;
    inp.oninput = function () {
      cityName = this.value
    }
    // https://api.muxiaoguo.cn/api/tianqi?city=长沙&type=1&api_key=779d7e46708290a5
    function getWeatherData() {
      var request = new XMLHttpRequest()
      // 第一种方式 拼接字符串
      // request.open('get','https://api.muxiaoguo.cn/api/tianqi?city=' + cityName + '&type=1&api_key=779d7e46708290a5')
      // 第二种方式 封装参数对象
      var params = {
        city: cityName,
        type: 1,
        api_key:'779d7e46708290a5'
      }
      
      request.open('get','https://api.muxiaoguo.cn/api/tianqi?' + Qs.stringify(params))
      request.send()
      request.onreadystatechange = function () {
        if (request.readyState === 4 && request.status === 200) {
          console.log(request.responseText);
          var res = JSON.parse(request.responseText)
          console.log(res);
          alert(`${cityName}的温度是${res.data.temp}`)
        }
      }
    }
  </script>

8:post有参请求

 post 请求的参数是携带在请求体中的,所以不需要再 url 后面拼接

 <button onclick="toLogin()">登录</button>
 // http://121.4.83.32:7004/user/login
    function toLogin() {
      var request = new XMLHttpRequest()
      request.open('post', 'http://121.4.83.32:7004/user/login')


      // 配置参数
      var params = {
        username: 'admin1',
        password: '123321'
      }
      // 设置请求头
     //发送json格式数据
      request.setRequestHeader('Content-type', 'application/json; charset=utf-8');
      request.send(JSON.stringify(params))
      request.onreadystatechange = function () {
        if (request.readyState === 4 && request.status === 200) {
          console.log(request.responseText);
        }
      }
    }

9:AJAX的封装

<script src="./qs.js"></script>
  <script src="./util.js"></script>
<!-- 登录 -->
  <button onclick="toLogin()">登录</button>
  <!-- 获取轮播图的数据 -->
  <button onclick="getDate()">获取数据</button>
    // 登录
    function toLogin() {
      // 设置参数
      var params = {
        username:'admin1',
        password: '123321'
      }
      login(params)
    }
    // 获取数据
    function getDate() {
      myAjax.get('/carousel/findAll', function (res) {
        console.log(res);
      }, function (err) {
        console.log(err);
      })
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值