Ajax学习 基础概念 发送请求 常见方法

news2024/11/26 6:17:57

AJAX 简介

AJAX 全称为Asynchronous Javascript And XML ,就是异步的JS和XML。
通过AJAX可以再浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据
AJAX 不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。

XML简介

XML可扩展标记语言。
XML 被设计用来传输和储存数据。
XML 和HTML类似,不同的是HTML中都是预定义标签,而XML中没有预定义标签,全都是自定义标签,用来表示一些数据。

AJAX的特点

  • AJAX的优点
    1 可以无需刷新页面而与服务器端进行通信
    2 允许你根据用户事件来更新部分页面内容

  • AJAX的缺点
    没有浏览历史,不能回退
    存在跨域问题(同源)
    SEO不友好

请求报文

格式与参数
行: 请求类型(GET POST) URL路径 HTTP协议的版本
头: HOST:xxx
Cookie:xxx
content-type:xxx
空行
体: 如果是GET请求 请求体是空的 如果是POST 请求体可以不为空
username=admin&password=admin

在这里插入图片描述

响应报文

行: HTTP协议的版本 200 ok
头:Content-Type:text/html;charset=utf-8
Content-encoding:gzip

空行
体 可以是一段HTML代码

在这里插入图片描述

const express = require('express')
const app = express()

app.get('/', (request, response) => {
    //创建路由规则
    //request是对请求报文的封装
    //response是对响应报文的封装

    response.send('hello ajax')
})

//监听端口
app.listen(8000, () => {
    console.log('在8000端口监听')
})

AJAX发起请求前的准备

1 前端页面的准备
2 服务端的准备

//1.创建对象    
        const xhr = new XMLHttpRequest();
        //2.初始化 设置请求的方法和url
        xhr.open('GET', 'http://127.0.0.1:8000/server');
        //3.发送
        xhr.send();
        //4.事件绑定 处理服务端返回的结果
        //on when 当...时候
        //readystate 是 xhr 对象中的属性,表示状态0,1,2,3,4
        //0 表示未初始化 1 open方法调用完毕 2 send方法调用完毕 3 服务返回部分结果  4 服务已经返回所有结果
        //cahnge 改变的时候触发
        xhr.onreadystatechange = function () {
            // 判断   如果readystate为4 说明服务端返回了所有的结果
            if (xhr.readyState === 4) {
                //判断响应的状态码 200 404 403
                if (xhr.status >= 200 && xhr.status < 300) {
                    //处理结果 行 头 空行 体
                    //1.响应行
                    // console.log(xhr.status)//状态码
                    // console.log(xhr.statusText) //状态字符串
                    // console.log(xhr.getAllResponseHeaders());//所有响应头
                    // console.log(xhr.response) //响应体
                    result.innerHTML = xhr.response
                } else {

                }

服务端

const express = require('express')
const app = express()

app.get('/server', (request, response) => {
    //设置响应头  设置允许跨域
    response.setHeader('Access-Control-Allow-Origin', '*')

    //设置响应体
    response.send('hello server')


})

//监听端口
app.listen(8000, () => {
    console.log('在8000端口监听')
})

注意:
on when 当…时候
readystate 是 xhr 对象中的属性,表示状态0,1,2,3,4
0 表示未初始化 1 open方法调用完毕 2 send方法调用完毕 3 服务返回部分结果 4 服务已经返回所有结果
cahnge 改变的时候触发

在AJAX请求中设置url参数

在url后面加上? + 参数

xhr.open('GET', 'http://127.0.0.1:8000/server?a=100&b=200&c=300');

AJAX 发送post请求

        //获取元素
        const result = document.getElementById('result');
        //绑定事件
        result.addEventListener("mouseover", function () {
            //1.创建对象
            const xhr = new XMLHttpRequest();
            //2.初始化 设置请求的类型 url
            xhr.open('post', 'http://127.0.0.1:8000/server')
            //3.发送    
            xhr.send();
            //4.事件绑定
            xhr.onreadystatechange = function () {
                //判断
                if (xhr.ready === 4) {
                    if (xhr.status >= 200 && xhr.status < 300) {
                        //处理服务端返回的结果
                        result.innerHTML = xhr.response
                        console.log(xhr.response)
                    }
                }
            }

        })

服务端

app.post('/server', (req, res) => {
    res.setHeader('Access-Control-Allow-Origin', '*')

    res.send('post')
})

POST请求时的send方法

 xhr.send('a=100&b=200&c=300');

在这里插入图片描述

说明这串信息已经传递给了服务端

AJAX设置请求头信息

在open方法后面设置 xhr.setRequestHeader();

它接收两个参数 第一个:名字 第二个:值

            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');//设置请求头

            //3.发送    
            xhr.send('a=100&b=200&c=300');

在这里插入图片描述

可以看到设置这行请求头信息可以让a=100&b=200&c=300这样的数据类型 变成 json类型的数据

Ajax 服务端响应json类型的数据

xhr.onreadystatechange = function () {
                if (xhr.readyState === 4) {
                    if (xhr.status >= 200 && xhr.status < 300) {

                        // console.log(xhr.response)
                        // result.innerHTML = xhr.response

                        //手动对数据转化
                        let data = JSON.parse(xhr.response)
                        console.log(data)
                    }

后端

app.all('/json-server', (request, response) => {
    // response.ContentType = "text/xml"
    response.setHeader('Access-Control-Allow-Origin', '*')

    //响应一个数据
    const data = {
        name: 'nicai'
    }
    //对对象进行字符串转换
    let str = JSON.stringify(data)

    response.send(str)
})

注意:

JSON.stringify方法可以把一个对象转换为一个字符串
JSON.parse方法可以把一个字符串转换为JSON数据

自动转换:
在js文件的开头设置 响应体的数据类型为json

xhr.responseType = 'json'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/384997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从FPGA说起的深度学习(四)

这是新的系列教程&#xff0c;在本教程中&#xff0c;我们将介绍使用 FPGA 实现深度学习的技术&#xff0c;深度学习是近年来人工智能领域的热门话题。在本教程中&#xff0c;旨在加深对深度学习和 FPGA 的理解。用 C/C 编写深度学习推理代码高级综合 (HLS) 将 C/C 代码转换为硬…

锚点定位使内容在指定区域显示

1、问题描述 在使用锚点定位时&#xff0c;使用 scrollIntoView 方法&#xff0c;导致整个页面随着锚点跳转 2、问题分析 因为最开始做需求的时候&#xff0c;只在最外层设置了一个滚动条&#xff0c;所以导致整体锚点的跳转是随着最外层滚动条距离顶部的高度跳转的&#xf…

从NLP视角看电视剧《狂飙》,会有什么发现?

文章目录1、背景2、数据获取3、文本分析与可视化3.1 短评数据预处理3.2 词云图可视化3.3 top关键词共现矩阵网络3.4 《狂飙》演职员图谱构建4、短评相关数据分析与可视化5、总结原文请关注&#xff1a;实用自然语言处理 作者&#xff1a;风兮 建议查看原文&#xff1a; https…

Linux下软件部署安装管理----rpmbuild打包rpm包部署安装

来源&#xff1a;微信公众号「编程学习基地」 文章目录1.安装rpmbuild2.rpm包制作打包rpm包3.rpm包安装4.rpm包卸载1.安装rpmbuild yum install rpmbuild yum install rpmdevtools创建rpm包管理路径&#xff0c;生成rpm相关目录 RPM打包的时候需要编译源码&#xff0c;还需要…

基于Cortex-M7内核STM32F767NIH6,STM32F767VGT6,STM32F767VIT6嵌入式技术资料

STM32F7 32 位 MCUFPU 基于高性能的 ARMCortex-M7 32 位 RISC 内核&#xff0c;工作频率高达 216MHz。Cortex-M7 内核具有单浮点单元(SFPU)精度&#xff0c;支持所有 ARM 单精度数据处理指令与数据类型。同时执行全套 DSP 指令和存储保护单元&#xff08;MPU&#xff09;&#…

【完美解决】应用程序无法正常启动(0xc000007b)请单击“确定”关闭应用程序

年期安装CorelDRAW X8 (64-Bit)&#xff0c;安装完成之后运行一点毛病都没有&#xff0c;可是过了两三个月&#xff0c;再打开就出现“应用程序无法正常启动(0xc000007b)请单击“确定”关闭应用程序”这个提示框&#xff0c;如下图示 出现这个问题我就上网查找&#xff0c;无非…

Java学习笔记 --- JavaScript

一、JavaScript介绍 JavaScript语言诞生主要是完成页面的数据验证。因此它运行在客户端&#xff0c;需要运行浏览器来解析执行JavaScript代码。JS是Netcape网景公司的产品&#xff0c;最早取名为LiveScript&#xff1b;为了吸引更多java程序员。更名为 JavaScript JS是弱类型&…

File 文件操作

File 文件操作&#xff1a; 一、常用方法&#xff1a; 方法类型描述public File(String pathname&#xff09;构造给定一个要操作文件的完整路径public File(File parent, String child)构造给定要操作文件的父路径和子文件名称public boolean createNewFile() throws IOExce…

hexo部署github搭建个人博客 完整详细带图版(更新中)

文章目录0. 前置内容1. hexo创建个人博客2. GitHub创建仓库3. hexo部署到GitHub4. 常用命令newcleangenerateserverdeploy5. 添加插件5.1 主题5.2 博客基本信息5.3 创建新的菜单5.4 添加搜索功能5.5 添加阅读时间字数提示5.6 打赏功能5.7 切换主题5.8 添加不蒜子统计5.9 添加百…

小程序的拉流组件live-player的使用

前言&#xff1a; 我们在小程序中实现音视频-直播/录播 的播放时候&#xff0c;会使用到微信官方提供的两个组件&#xff0c;推流组件和拉流组件&#xff0c;这里来分享下他的拉流组件的使用和具体需要注意的点。 效果图&#xff1a; 1、拉流状态code日志 2、代码使用截图&am…

深度学习 Day26——利用Pytorch实现天气识别

深度学习 Day26——利用Pytorch实现天气识别 文章目录深度学习 Day26——利用Pytorch实现天气识别一、前言二、我的环境三、前期工作1、导入依赖项和设置GPU2、导入数据3、划分数据集四、构建CNN网络五、训练模型1、设置超参数2、编写训练函数3、编写测试函数4、正式训练六、结…

前端利用emailjs发送邮件

最近有一个需求&#xff0c;前端发送一个form表单到一个邮箱&#xff0c;找了一圈发现emailjs还不错就使用他了。首先emailjs官网注册一个账号注册完之后创建一个邮件服务&#xff08;我这里使用的是谷歌邮箱&#xff09;链接谷歌邮箱账户 然后创建服务接下来就要创建一个邮件的…

浅谈入门Servlet注解式开发

Servlet3.0版本之后&#xff0c;推出了Servlet基于注解式开发。 优点&#xff1a;开发效率高&#xff0c;直接在java类上使用注解进行标注&#xff0c;可直接省略WEB.xml文件配置import javax.servlet.annotation.WebServlet; WebServlet 使用WebServlet注解标注 WebServlet的…

五子棋的设计与实现

术&#xff1a;Java等摘要&#xff1a;五子棋是一种两人对弈的纯策略型棋类游戏&#xff0c;非常容易上手&#xff0c;老少皆宜。为了更好的推广五子棋&#xff0c;研究简单的人工智能方式&#xff0c;运用Java开发五子棋游戏。主要包含了人机对战&#xff0c;棋盘初始化&#…

中国跻身量子计算第一梯队,为何它是硬科技必争之地?丨两会唠科

科技云报道原创。 “两会唠科”是由腾讯科技推出的两会特别策划&#xff0c;重点讲述中国科技名片。本期与科技云报道联合出品&#xff0c;聚焦中国量子计算研究成果和相关进展。 全球越来越多的国家加入到量子科技领域的竞赛当中&#xff0c;争夺下一步的技术战略制高点。 今…

【论文随笔】Transfer of temporal logic formulas in reinforcement learning

Zhe Xu and Ufuk Topcu. 2019. Transfer of temporal logic formulas in reinforcement learning. In Proceedings of the 28th International Joint Conference on Artificial Intelligence (IJCAI’19). AAAI Press, 4010–4018. 这是一篇将inference和learning结合起来的文章…

Selenium如何隐藏浏览器页面?

Selenium隐藏浏览器页面 背景 在工作&#xff0c;学习中&#xff0c;我们常常会使用selenium来获取网页上的数据&#xff0c;编完完整程序之后&#xff0c;实现真正意义上的自动化获取&#xff0c;此时我们会发现在运行中往往会弹出浏览器页面&#xff0c;在调试过程中&…

Java程序的逻辑控制

一、顺序结构 顺序结构比较简单&#xff0c;如果我们按照代码书写的顺序一行一行执行&#xff0c;将会是这样的&#xff1a; System.out.println("aaa"); System.out.println("bbb"); System.out.println("ccc"); // 运行结果 aaa bbb ccc 如…

网络基础服务器 与SMP、NUMA、MPP 三大体系结构科普

OSI和TCP/IP是很基础但又非常重要的知识&#xff0c;很多知识点都是以它们为基础去串联的&#xff0c;作为底层&#xff0c;掌握得越透彻&#xff0c;理解上层时会越顺畅。今天这篇网络基础科普&#xff0c;就是根据OSI层级去逐一展开的。01计算机网络基础01 计算机网络的分类按…

JVM—类加载子系统

JVM细节版架构图 ​ 本文针对Class Loader SubSystem这一块展开讲解类加载子系统的工作流程 类加载子系统作用 1.类加载子系统负责从文件系统或者网络中加载class文件&#xff0c;class文件在文件开头有特定的文件标识即16进制CA FE BA BE&#xff1b; 2.加载后的Class类信息…