原生JS实现Ajax异步交互

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

原生JS实现Ajax应该是前端开发人员在学习ajax中的第一步,这篇博客需要一些必要的前置知识,会更容易理解:

JS基础,JS DOM操作,JS事件,ES6(熟悉更好)

 什么是AJAX

AJAX:全称Asynchronous Javascript And XML,也就是异步的JS和XML的意思。JS我们熟悉,XML可能不熟悉。

XML:XML文件和我们的HTML很类似,都是使用标签结构,但是XML是用来存放数据和传输数据的,且没有像<div>,<a>这样的预定义标签,全部是用户的自定义标签。然而现在已经基本被JSON文件所取代。

Ajax的优缺点:

        优点:1. 无需刷新页面与服务器进行通信
                   2. 允许根据用户事件来更新网页部分内容

        缺点:1. 没有浏览历史,不能回腿
                   2. 存在跨域问题,必须同源
                   3. SEO不友好

HTTP协议

非常重要的服务器和客户端信息交互的网络传输协议,大致流程是:

1. 客户端向服务器发出HTTP请求,发送请求报文

2. 服务器收到请求报文,将响应报文返回给客户端

3. 客户端收到响应报文的数据,将数据渲染到web上

请求报文和响应报文格式

    请求报文:
    行  GET/POST URL HTTP版本
    头  Host: abc.com
        Cookie: name=abc
        Content-type: application/x-www-form-urlencoded
        User-Agent: chrome 83
    空行
    体  (get为空,post为请求体) username=admin%password=admin

    响应报文:
    行  HTTP/1.1 状态码 状态码解释 (200 OK; 404 Not Found)
    头  Content-Type: text/html;charset=utf-8
        Content-length: 2048
        Content-encoding: gzip
    空行
    体  <html>
            <head>
            </head>
            <body>
            </body>
        </html>

NodeJS和express框架安装

为了实现简单的前后端异步交互,我们需要用到nodejs搭建一个简易的服务端,便于ajax的理解。如果你完全没有接触过nodejs,无需担心,这里并不需要深入的nodejs知识,只需要跟着步骤来搭建一个简易的服务器就好。

首先百度/谷歌搜索nodejs官网,出来是这个样子

点击左下角的绿框下载并安装即可,这样电脑里就有了nodejs的开发环境。

接着在喜欢的位置创建一个文件夹,用来存储我们的html文件和服务器js文件。接着可以在我们的文件夹内安装express框架了。

1. 初始化node:打开vscode,找到目标文件夹,右键点击打开终端,输入npm init --yes并回车,初始化我们的环境。会得到以下的信息,并且文件夹内多了一个JSON文件。(这里的npm是nodeJS自带的包管理工具)

2. 输入npm i express,回车,就开始安装了。如果出现报错说没有权限,windows系统请用管理员身份打开vscode,mac系统在刚才的终端中输入sudo -s回车,输入密码,就可以进入管理员权限,再输入npm i express即可,安装完后,长这样:

 

2. express安装完毕后,我们再在刚才的文件夹创建一个新的文件夹,用来存放我们的代码。接着在里面创建一个JS文件,打开,测试一下我们的express,搭建一个最基础的服务器。

JS文件中输入:

//引入express
const express = require('express');

//创建应用对象
const app = express();

//创建路由规则
app.get('/server', (request, response) => {
    //设置响应
    response.send('HELLO EXPRESS')
});

//监听端口启动服务
app.listen(8000, () => {
    console.log("服务已经启动,端口监听中")
})

保存文件,然后打开当前文件夹的终端,输入node 此js文件名,回车即可,这里我们能看到我们的服务已经启动。

3. 进入本地端口查看一下我们的服务器,打开一个新web页面,输入localhost:8000/server,就可以看到我们的HELLO EXPRESS。

 

4. 退出当前的服务器,直接在终端按ctrl+c即可(不退出的话,之后的server如果采用同样的端口号,会出现端口占用的情况)

AJAX实现GET请求案例

GET和POST的区别,如果熟悉计算机网络和HTTP协议的同学,应该很清楚,这里不过多解释,这里我们用GET作为一个ajax请求的案例。

假设,我们有一个需求,当点击页面上的一个按钮之后(事件),再向我们的服务器发送请求,将后台的数据返回至前端。

先搭建服务器并在终端输入node server.js(服务器文件名)启动服务:

//引入express
const express = require('express');

//创建应用对象
const app = express();

// 创建路由规则
app.get('/server', (request, response) => {
    //设置响应头,设置允许跨域
    response.setHeader('Access-Control-Allow-Origin','*')
    //设置响应体
    response.send('HELLO AJAX')
});
//监听端口启动服务
app.listen(8000, () => {
    console.log("服务已经启动,端口监听中")
})

 搭建前端:

<!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>
    <style>
        #result {
            width: 200px;
            height: 100px;
            border: pink 1px solid;
        }
    </style>
</head>
<body>
    <button>点击发送请求</button>
    <div id="result"></div>
    <script>
        const btn = document.querySelector('button');
        const result = document.querySelector('#result');
        btn.addEventListener('click', () => {
            //1. 创建对象
            const xhr = new XMLHttpRequest();
            //2. 初始化 设置请求方法和url
            xhr.open('GET', 'http://127.0.0.1:8000/server');
            //3. 发送
            xhr.send();
            //4. 事件绑定 处理服务器返回的结果
            xhr.addEventListener('readystatechange', () => {
                //判断 服务端是否返回了所有结果
                if (xhr.readyState === 4){
                    //判断响应状态码 200 404 403 401 500
                    if(xhr.status >= 200 && xhr.status < 300){
                        //将返回结果渲染到页面
                        result.innerHTML = xhr.response;
                    }
                }
            })
        })
    </script>
</body>
</html>

然后打开我们的html页面,点击按钮,成功拿到服务端数据!

 

JSON文件的Ajax应用

需要先将数据转换为JSON字符串格式,利用JSON.stringfy方法。

 现在我们换一下需求,想要按下键盘就返回数据,并遍历数据里的每个属性值。服务端我们新建一个json-server.js文件。

const express = require('express');
const app = express();
app.get('/json-server', (request, response) => {
    response.setHeader('Access-Control-Allow-Origin','*')
    const data = {
        name: 'Ryan',
        age: '23',
        hobby: 'Gaming'
    }
    //将数据转换为JSON的字符串格式
    let str = JSON.stringify(data);
    response.send(str);
})
app.listen(8000,() => {
    console.log("服务端已启动");
})

然后前端页面把body内稍为修改一下:

<body>
    <div id="result"></div>
    <script>
        window.addEventListener('keydown', () => {
            const xhr = new XMLHttpRequest();
            //设置响应体类型
            xhr.responseType = 'json';
            xhr.open('GET','http://127.0.0.1:8000/json-server');
            xhr.send();
            xhr.addEventListener('readystatechange', () => {
                if (xhr.readyState === 4){
                    if (xhr.status >= 200 && xhr.status < 300){
                        //手动数据转换
                        // let data = JSON.parse(xhr.response)
                        // result.innerHTML = data.name;
                        //自动数据转换(需要设置响应体类型为json)
                        // result.innerHTML = xhr.response.name;
                        if (result.innerHTML) return;
                        for (let key in xhr.response){
                            result.innerHTML += xhr.response[key] + "</br>";
                        }
                    }
                }
            })
        })
    </script>
</body>

这样就可以把我们的数据传回前端啦~

 

 

ajax 1.1 什么是ajax: Ajax即“Asynchronous Javascript And XML”(异步JavaScript 和XML),是指一种创建交互式网页应用的网页开发技术。Ajax=异步JavaScript和XML(标准通用标记语言的子集)。通过在后台与服务器进行少量数据交换,Ajax可以使用网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新(无刷新... 阅读详情

相关推荐

PCB过孔全介绍

过孔(via)是多层PCB的重要组成部分之一,钻孔的费用通常占PCB制板费用的30%到40%。简单的说来,PCB上的每一个孔都可以称之为过孔。从作用上看,过孔可以分成两类:一是用作各层间的电气连接;二是用作器件的固定定位。如果从工艺制程上来说,这些过孔一般又分为三类,即盲孔(blind via)、埋孔(buried via)和通孔(through via)。盲孔位于印刷线路板的顶层和底层表面,具

小王的自我修行路 2338

原生Ajax请求流程:同步请求、异步请求

Ajax 异步无刷新技术 原生Ajax实现流程 得到XMLHttpRequest对象 - var xhr = new XMLHttpRequest(); 打开请求 - xhr.open(method,url,async); - method:请求方式,通常是GET|POST - url:请求地址 - async:是否异步。如果是true,表示异步,false表示同步 发送请求 - xhr.send(params); - params:请求时需要传递的参数 - 如果是GET请求,设置null(GET请.

m0_51258512的博客 3440

【2026年华为暑期实习(非AI方向(通软&嵌软&测试&算法&数据科学))-4月8日-第一题- 包裹的编码】(题目+思路+Java&C++&Python解析+在线测试)

摘要:该问题要求将给定的十进制整数N转换为混合进制编码字符串,并处理回文检测。首先根据N的符号位确定编码首位(01),然后按输入的进制序列依次对N的绝对值进行取余和整除操作,得到编码数组。将数组元素转换为字母后生成字符串,若字符串为回文则添加"(palindrome)"后缀;否则输出最长回文子串(字典序最小)。算法采用中心扩展法检测回文,时间复杂度为O(L²),空间复杂度为O(L),其中L为字符串长度。

m0_73659489的博客 99

ajax如何做到异步交互,ajax实现异步交互

今天用ajax实现页面无刷新和后台交互并更新页面数据的功能,现在整理出来和大家分享,希望大家补充。1、javascript代码,实现ajax与后台交互,在前台页面调用receive方法;var xmlHttpRequest; //定义一个变量用于存放XMLHttpRequest对象//定义一个用于创建XMLHttpRequest对象的函数function createXMLHttpReques...

weixin_35381077的博客 1017

使用原生Ajax技术实现异步交互

实现原理 使用原生原生Ajax技术实现异步交互,就是使用Ajax原生异步对象XMLHttpRequest,来进行创建对象、绑定事件、初始化数据、发送数据的操作过程。 实现步骤 第一步,利用XMLHttpRequest创建异步对象。 //1.创建异步对象 var xmlHttp = new XMLHttpRequest(); 第二部,利用异步对象绑定触发事件函数. xmlHttp.onreadystatechange = function () {} 第三步,初始请求参数 xmlH

DSL95的博客 888

js判断所有异步ajax请求调用完毕

$(function() { $(document).ajaxStop(function() { $(this).unbind("ajaxStop"); //prevent running again when other calls finish LoadContact(); }); LoadCategories($('#Category'))...

weixin_30376163的博客 1838

使用ajax实现异步登录,AJAX实现异步登录

//代码较为简单,只是测试所用1.html登录页面代码用户名:密码:2.js代码//初始化window.onload=function(){var btnLogin = document.getElementById("btnLogin");//为登录按钮添加事件btnLogin.onclick=function(){Login();};}function Login(){var userName...

weixin_42300317的博客 898

原生js 实现Ajax 异步处理 实列

打开 eclipse 创建如下 动态网页 如下图所示: dologinServlet.java 代码如下: package servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.an...

JavaDarren的博客 364

35-WEB开发:原生JSAjax技术实战指南

摘录小迪安全35天

m0_70346880的博客 739

Ajax和axios简单用法

Ajax(Asynchronous JavaScript And XML,异步JavaScript和XML)。Ajax

田乐蒙的博客 1482

JavaWeb 19 AJAX

AJAX =异步JavaScript和XML)AJAX不是新的编程语言,而是一种使用现有标准的新方法;AJAX最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容;AJAX不需要任何浏览器插件,但需要用户允许 JavaScript 在浏览器上执行;只是实现 Ajax 的一种方式;

m0_73983707的博客 590

Ajax原理及不同场景下的应用

Ajax原理及不同场景下的应用 1 概念 ajax是Asynchronous Javascript and xml(异步js和xml)的缩写。 同步与异步:客户端和服务器段的通信基础上。 同步:客户端发请求,等待,服务器端响应,返回给客户端,客户端接收到了,在继续做其他操作。即客户端必须等待服务器的响应,且在这期间无法做其他操作,直至响应接受到。 异步:客户端发请求,不需要等待,服务器端响应,...

qq_43070500的博客 229

javascript实现原生ajax的几种方法介绍

自从javascript有了各种框架之后,比如jquery,使用ajax已经变的相当简单了。但有时候为了追求简洁,可能项目中不需要加载jquery这种庞大的js插件。但又要使用ajax这种功能该如何办呢?下面和大家分享几种利用javascript实现原生ajax的方法。 实现ajax之前必须要创建一个 XMLHttpRequest 对象。如果不支持创建该对象的浏览器,则需要创建 ActiveXO...

weixin_30346033的博客 92

AJAX学习笔记(2)----使用原生JS实现异步交互

实现异步交互的五个步骤1.创建HttpRequest对象 2.注册回调函数 3.设置连接信息 4.发送数据开始与服务器进行交互 5.利用回调函数处理数据1:创建HttpRequest对象var xmlhttp;if(window.XMLHttpRequest){ xmlhttp= new XMLHttpRequest(); if(xmlhttp.overrideMim

MR_yanqianke的博客 363

AJAX | json、上传文件、SweetAlert插件

AJAX准备知识:JSON 1,什么是 JSONJSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)JSON 是轻量级的文本数据交换格式JSON 独立于语言 *JSON 具有自我描述性,更易理解 JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON...

afd2828的博客 123

jq和js的关系_JavaScript、jQuery、AJAXJSON 这四个之间的关系?

===以下回答考虑到简单易懂,更多从使用角度来切入描述,并非从历史和严格的定义切入,严谨的答案参见上面===有一天,你们人类不满足网页只是一些文字和图片的展示,希望页面上可以有更多功能。比如点击一个按钮,弹一个窗口者改变页面上某些内容。为了实现这种功能,就创造了一门脚本语言,逐步升级演化成了 JavaScript 这门语言。JavaScript页面提供更多功能,是页面交互功能的基础语言。此外...

weixin_26997697的博客 141

ajax使用回调函数的(原生代码和jquery代码)

via: http://hi.baidu.com/7636553/item/bbcf5fc93c8c950aac092f22   ajax使用回调函数的子(原生代码和jquery代码) 一、 ajax代码存在的问题(异步交互的问题) ajax所请求的url,如果因为网络等问题,很久没有回应,则给用户造成“假死”的现象。 代码如下: xmlHttp = GetXmlHttp

mikyz的专栏 5120

AJAX入门

学习资料 https://www.bilibili.com/video/BV1WC4y1b78y?p=27 一、概述 AJAX = 异步JS和XML,是一种异步·无刷新技术。 同步 在客户端请求服务器和等待服务器响应的过程中,客户端只能等待,不能做别的事。 这就像你烧了一壶水,你必须等这壶水烧开才能去扫地…… 异步 这段时间内,客户端可以继续做事情,不会卡在那里。 你不必等这壶水烧开,在等待烧开的期间就可以去扫地~ 优势 用了AJAX技术后,程序可以快速回应,不需要重新刷

qq_38523172的博客 191

JavaWeb基础学习笔记18——AJAX

1、AJAX概念: AJAX(ASynchronous JavaScript And XML,异步JavaScript和XML),是一种用于创建快速动态网页的技术,在无需重新加载整个网页的情况下,能够更新部分网页。通过在后台与服务器进行少量的数据交换,Ajax可以使网页实现异步更新。 Ajax可以提升用户的体验。 异步和同步:客户端和服务器端相互通信的基础上的同步和异步。 同步:客户端必须等待服务器端的响应,在等待的期间客户端不能做其它工作。 异步:客户端不需要等待服务器端的响应,在服务器处理请

weixin_44623055的博客 5309

AJAX基础

概念

FFFPAG的博客 148

Ajax发送请求

1,什么是ajax?   Asynchronous JavaScript and XML(当然现在xml已经由json代替);   主要是用于前后台的交互(表单提交已经被废弃);   使用场景:前台获取数据、表单的失焦验证; 2,如何在有服务的环境下使用ajax发送请求   1.创建ajax对象-xmlhttprequest对象:(分为两种类型)     在新...

1234Wu--前端Blog 141
上一篇: JS闭包的由浅入深理解和实例分析
下一篇: JS中call、apply和bind的形象对比
RyanWu0430
博客等级 码龄5年 11粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值