IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Ajax(Asynchronous Javascript And XML) -> 正文阅读

[JavaScript知识库]Ajax(Asynchronous Javascript And XML)


前言

Ajax就是浏览器提供的一套API,可以通过JavaScript调用,从而实现通过代码控制请求与响应,实现通过JavaScript进行网络编程。
应用场景:
(1)按需获取数据
(2)对用户数据进行校验
(3)自动更新页面内容
(4)提升用户体验

一、原生Ajax

原生Ajax的发送请求的步骤
(1)创建一个XMLHttpRequest类型对象
(2)准备发送,打开一个与网址之间的连接
(3)执行发送动作
(4)指定xhr状态变化事件处理函数

1.xhr对象

AJAXAPI中核心提供的是一个XMLHttpRequest类型,所有的AJAX操作都需要使用到这个类型。
IE6存在兼容问题,为了解决这个兼容问题,可以书写以下代码:

    <script>
        //创建一个xhr对象
        var xhr = null
        //IE6兼容写法
        if (window.XMLHttpRequest) {
            xhr = new XMLHttpRequest();
        } else {
            xhr = new ActiveXObject();
        }
    </script>

2.open方法

xhr.open(method,url)
method:要是用的http方法,如GET、POST、PUT、DELETE等
url:要向其发送请求的URL地址,字符串格式。

//open方法
        xhr.open("GET","https://jsonplaceholder.typicode.com/users")

3.send方法和请求头

如果使用get方法请求,那么不需要send方法中不需要传参数,只需在url网址中书写,post方法必须要传参数,而且需要在open和send中间设置请求头。
设置请求头的方法:setRequestHeader(“Content-type”,“application/x-www-form-urlencoded”)
send中传入需要修改和增加的参数。

        //创建一个xhr对象
        var xhr = null;
        //IE6兼容写法
        if (window.XMLHttpRequest) {
            xhr = new XMLHttpRequest();
        } else {
            xhr = new ActiveXObject();
        }
        //open方法
        xhr.open("POST","https://jsonplaceholder.typicode.com/users")
        //设置请求头
        xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded")
        //发送数据
        xhr.send("name=gd&age=22")

4.响应状态分析

在这里插入图片描述

<!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>Document</title>
</head>
<body>
    <script>
        //创建一个xhr对象
        var xhr = null;
        //IE6兼容写法
        if (window.XMLHttpRequest) {
            xhr = new XMLHttpRequest();
        } else {
            xhr = new ActiveXObject();
        }
        //open方法
        xhr.open("POST","https://jsonplaceholder.typicode.com/users")
        //设置请求头
        xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded")
        //发送数据
        xhr.send("name=gd&age=22")
        xhr.onreadystatechange = function () {
            // 通过判断 xhr 的 readyState ,确定此次请求是否完成
            if (this.readyState === 4) {
                console.log(this.responseText)
      }
    }
    </script>
</body>
</html>

5.同步和异步

open还有第三个参数,为布尔值true和false,true为异步加载,false为同步加载。
建议:通常使用异步加载

<!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>Document</title>
</head>
<body>
    <script>
        //创建一个xhr对象
        var xhr = null;
        //IE6兼容写法
        if (window.XMLHttpRequest) {
            xhr = new XMLHttpRequest();
        } else {
            xhr = new ActiveXObject();
        }
        //open方法
        xhr.open("POST","https://jsonplaceholder.typicode.com/users",true)
        //设置请求头
        xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded")
        xhr.onreadystatechange = function () {
            // 通过判断 xhr 的 readyState ,确定此次请求是否完成
            if (this.readyState === 4) {
                console.log(this.responseText)
            }
        }
        //发送数据
        xhr.send("name=gd&age=22")
        
        console.log("after")
    </script>
</body>
</html>

二、jQuery封装的Ajax库

1.$.ajax()

在这里插入图片描述

<!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>Document</title>
</head>
<body>
    <script src="js/jquery-1.12.4.min.js"></script>
    <script>
        $.ajax({
            url: "http://localhost:3000/users",
            type: "GET",
            dataType: "json",
            data: {"id": 2},
            success: function (data) {
                console.log(data)
            }
        })
    </script>
</body>
</html>

2.$.get()

$.get(url,data,callback)

<!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>Document</title>
</head>
<body>
    <script src="js/jquery-1.12.4.min.js"></script>
    <script>
        $.get("http://localhost:3000/users",{"id": 2},function (data) {
            console.log(data)
        })
    </script>
</body>
</html>

3.$.post()

$.post(url,data,callback)

<!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>Document</title>
</head>
<body>
    <script src="js/jquery-1.12.4.min.js"></script>
    <script>
        $.post("http://localhost:3000/users",{"name": "gg","age": 12,"class": 3},function (data) {
            console.log(data)
        })
    </script>
</body>
</html>

三、Axios库

1.axios API

axios(config)
axios(url, config)config可选 (config为对象格式的配置选项)
在这里插入图片描述

<!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>Document</title>
</head>
<body>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
        axios({
            url: "/users",
            method: "post",
            baseURL: "http://localhost:3000",
            header: {"Content-Type": "application/json"},
            data: {
                "name" : "dd",
                "age": 20,
                "class": 3
            }
        }).then(function (gg) {
            console.log(gg.data)
        }).catch(function (err) {
            console.log(err)
        })
    </script>
</body>
</html>

2.axios拦截器

在请求或响应被then或catch处理前拦截它们。
在这里插入图片描述

3.get和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>Document</title>
</head>
<body>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
        axios.get("http://localhost:3000/users",{
            params: {
            "id" : 8
            }
        })
            .then(function (res) {
            console.log(res.data)
        })
        axios.post("http://localhost:3000/users",{
           "name": "ax",
           "age": 23,
           "class": 2
        })
            .then(function (res) {
            console.log(res.data)
        })
    </script>
</body>
</html>

四、跨域

1.jQuery对jsonp跨域的支持

jQuery 中使用JSONP就是将dataType 设置为 jsonp

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>  
</head>
<body>
  <input type="button" value="请求" class="btn">
  <script src="js/jquery-1.12.4.min.js"></script>
  <script>
    $(".btn").click(function () {
      // 发送跨域的 ajax 请求
      $.ajax({
        url: "https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web",
        type: "GET",
        dataType: "jsonp",
        jsonp: "cb",    //这条属性可以设置回调函数的参数名称(必须与后台接口的回调函数参数名保持一致)
        jsonpCallback: "abc", //jQ 自动分配的回调函数的名称进行重命名
        data: {"wd": "ajax"},
        success: function (data) {
          console.log(data)
        }
      })
    })
  </script>
</body>
</html>

2.cros跨域

这种方案无需客户端作出任何变化(客户端不用改代码),只是在被请求的服务端响应的时候添加一个 Access-Control-Allow-Origin 的响应头,表示这个资源是否允许指定域请求。
在这里插入图片描述


总结

这部分就学习到这里啦,使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。
在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 23:15:06  更:2021-07-28 23:15:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 11:42:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码