原生js的Ajax实例

article/2025/10/6 6:20:18

与jQuery不同,原生js的ajax的实现相比来说复杂一些,因为jquery中的$.ajax()方法已经把js的实现封装起来,使用起来更加方便。但是,原生js的实现过程,对于理解ajax,好像更清晰一些。

之前写过的jQuery的ajax实现:jQuery的Ajax实例(附完整代码)

这次使用原生js实现

实现过程(文末有完整代码)

以此实例为例:
在这里插入图片描述

1.创建XMLHttpRequest对象

这里的 XMLHttpRequest 是针对非IE浏览器而言的,对于IE浏览器,需要创建 ActiveXObject 对象
因此

//第一步:创建XMLHttpRequest对象var xmlHttp;if (window.XMLHttpRequest) {            //非IExmlHttp = new XMLHttpRequest();console.log('创建了XMLHttpRequest对象');} else if (window.ActiveXObject) {       //IExmlHttp = new ActiveXObject("Microsoft.XMLHTTP");console.log('创建了ActiveXObject对象');}

2.设置请求方式和url,即open()

在这里插入图片描述
async一般设置为异步方式,即true

//第二步:设置请求方式var url = "http://hebutgo.com:8080/maps/getMapsList";xmlHttp.open("GET", url, true);console.log('执行open()');

3.设置发送请求的内容,即send()

在这里插入图片描述
与$.ajax()中的data相似,不过send的内容是字符串形式,即把data中的json数组转化为一个字符串。
例如:

data:{
name:zhangsan
age:18
}

应拼接成为:(键值对之间用&连接)

data = 'name=zhangsan&age=18'

然后

//第三步:设置发送请求的内容xmlHttp.send(data);

本例中无需请求内容,,就直接

	xmlHttp.send();

4.回调函数

回调函数通过监听 readystatestatus 值的变化,得到返回值,执行回调

与$.ajax()的success回调不同,js的ajax从请求初始化到发送请求,再到请求结束,readystatestatus的值时钟在发生着变化,当 readystate=4 并且 status=200时,标志着请求成功,可以执行回调内容,其余情况均为发生错误

可以理解为: readystate=4 && status=200 等价于 jquery中的 success 回调

对于返回值
包含 responseTextresponseXML 两种
这个的选择要看服务器预先设定的返回值是什么类型的

前者拿到的是字符串;后者是XML

1.如果是字符串,处理后可以赋值给html中的标签,或者构造节点,显示到界面
2.如果是XML,则需要根据具体内容,添加到相应的html标签中

//第四步:回调函数xmlHttp.onreadystatechange = function() {//console.log('执行了回调函数,此时readystate为'+xmlHttp.readyState+' status为'+xmlHttp.status);if (xmlHttp.readyState == 4) {if (xmlHttp.status == 200) {var obj = document.getElementById('getData');//console.log(xmlHttp.responseText);//console.log('拿到了返回数据');//console.log(JSON.parse(xmlHttp.responseText));var res = JSON.parse(xmlHttp.responseText).result;for(var i=0;i<res.length;i++){var node = document.createElement('tr');node.innerHTML = '<td>'+res[i]['申请人省份']+'</td><td>'+res[i]['counts']+'</td>'obj.appendChild(node);			            }           } else {alert("AJAX服务器返回错误!");}}

本例中拿到的是responseText,为字符串,但是通过打印可以看出,结构是json数组转成的一个大字符串。
如下:
{“result”:[{“申请人省份”:“0”,“counts”:1553},…,{“申请人省份”:“黑龙江省”,“counts”:215}],“reason”:"",“status”:“success”}

通过

JSON.parse(xmlHttp.responseText)

转成
在这里插入图片描述
之后通过js添加节点,连接在 < table > 标签中

状态值和状态码

状态值:readystate

0 - (未初始化)还没有调用send()方法
1 - (载入)已调用send()方法,正在发送请求
2 - (载入完成)send()方法执行完成,
3 - (交互)正在解析响应内容
4 - (完成)响应内容解析完成,可以在客户端调用

状态码:status

1**:请求收到,继续处理
2**:操作成功收到,分析、接受
3**:完成此请求必须进一步处理
4**:请求包含一个错误语法或不能完成
5**:服务器执行一个完全有效请求失败

具体取值:(常见)

200——交易成功
400——错误请求,如语法错误
403——请求不允许
404——没有发现文件、查询或URl
500——服务器产生内部错误
504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505——服务器不支持或拒绝支请求头中指定的HTTP版本

测试:

我在代码中加入了console打印,可以看出二者的状态变化
虽然说onreadystatechange可以随时监听readystate的变化,但是实际能打印出来的仅有2、3、4三个状态。
在这里插入图片描述
如果调整代码顺序
onreadystatechange放在open()和send()执行之前,结果如下
在这里插入图片描述
结果与理论上的状态值定义不太相同,这里还没搞太明白。。

实例完整代码

<!DOCTYPE html>
<html>
<head><title>ajax_js</title><style type="text/css">#getData th{width: 100px;}#getData td{text-align: center;}</style>
</head>
<body><div class="main"><div><button onclick="request()">Request</button></div><table id="getData"><tr><th>申请人省份</th><th>人数</th></tr></table></div><script type="text/javascript">function request(){//第一步:创建XMLHttpRequest对象var xmlHttp;if (window.XMLHttpRequest) {            //非IExmlHttp = new XMLHttpRequest();console.log('创建了XMLHttpRequest对象');} else if (window.ActiveXObject) {       //IExmlHttp = new ActiveXObject("Microsoft.XMLHTTP");console.log('IE');console.log('创建了ActiveXObject对象');}//第二步:设置请求方式var url = "http://hebutgo.com:8080/maps/getMapsList";xmlHttp.open("GET", url, true);console.log('执行了open()');//第三步:设置发送请求的内容xmlHttp.send();console.log('调用了send()');//第四步:回调函数xmlHttp.onreadystatechange = function() {console.log('执行了回调函数,此时readystate为'+xmlHttp.readyState+' status为'+xmlHttp.status);if (xmlHttp.readyState == 4) {if (xmlHttp.status == 200) {var obj = document.getElementById('getData');console.log('拿到了返回数据');console.log(JSON.parse(xmlHttp.responseText));var res = JSON.parse(xmlHttp.responseText).result;for(var i=0;i<res.length;i++){var node = document.createElement('tr');node.innerHTML = '<td>'+res[i]['申请人省份']+'</td><td>'+res[i]['counts']+'</td>'obj.appendChild(node);			            }} else {alert("AJAX服务器返回错误!");}}}}</script>
</body>
</html>

对于responseXML,以及onreadystatechange监听的问题,还不够清晰,有待之后学习补充。

参考 总结 - Ajax工作原理和实现步骤


http://chatgpt.dhexx.cn/article/Ij0MGsdh.shtml

相关文章

Ajax最简单实例(java)

总体介绍&#xff0c;不感兴趣的请跳过&#xff1a;以下内容是关于DWR来实现Ajax的方法。 一、 Ajax的介绍。 AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 AJAX 不是新的编程语言&#xff0c;而是一种使用现有标准的新方法。 …

Ajax学习(二)—— 一个简单的Ajax实例

通过上篇博客认识Ajax之后,我们通过一个简单的实例来消化消化理论知识,一睹Ajax的庐山真面目。 1.实例功能: 当用户输入用户名,文本框失去焦点后,通过异步调用来判断该用户名是否已经存在。若存在,则在上图中红框处显示提示。当用户名可用时,提交按钮变为可用状态。 2.…

Ajax实例(JAVA)

这是一个用于留言板留言提交与读取的简单实例&#xff0c;不包括回复、编辑与删除等其它管理功能。 本实例的目的在于用一个简单的例子展示如果在java web应用中&#xff0c;用javascript开发Ajax应用。 一、web页面 msbord.jsp 1、本页面用于留言显示 2、本页面提供留言功能…

原生js实现Ajax实例讲解

Ajax简介 ajax 异步 JavaScript 和 XML。 ajax是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。我们知道&#xff0c;传统的网页&#xff08;不使用ajax&#xff09;如果需要更新内容&#xff0c;必须重新加载整个网页。Ajax的出现&#xff0c;使…

jsp ajax实例讲解

下面介绍JSP前台表单内容通过Ajax异步提交到后台Servlet进行校验&#xff08;校验方式多种&#xff0c;包括提取数据库信息&#xff0c;校验用户名是否重复等&#xff09;&#xff0c;异步在JSP表单页面显示校验结果信息的基本过程。 一、说明&#xff1a; 1.由于本…

jqueryajax实例

运用ajax结合dom写的小实例&#xff0c;其中记录了过程中遇到的问题和解决方法 任务要求&#xff1a; 模拟“请求用户列表”&#xff0c;向后台请求&#xff0c;后台会去数据库中将你的用户列表全部查出来&#xff0c;返回很多条记录&#xff0c;现在将记录显示在页面上用表格打…

Ajax简介和实例

目录 什么是 AJAX &#xff1f; AJAX实例 ajax-get无参 ajax-get有参 对象和查询字符串的互转 ajax-post ajax-post 表单 AJAX 是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。 什么是 AJAX &#xff1f; 菜鸟教程是这样介绍的&#xff1a…

Ajax实例讲解与技术原理

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka 摘要&#xff1a;AJAX即“Asynchronous Javascript And XML”&#xff08;异步JavaScript和XML&#xff09;&#xff0c;是指一种创建交互式网页应用的网页开发技术。AJAX 是一种用于创建快速动态网页的…

jQuery的Ajax实例(附完整代码)

目录 写在前边什么是AjaxAjax基本结构实例实例1实例2 小结 写在前边 作为一个前端刚入门没多久的小白&#xff0c;想在这里分享一下我的学习内容&#xff0c;就算是学习笔记了。因为前端的大部分学习都是通过网站上的教程&#xff0c;所以遇到不懂得问题&#xff0c;也只有求助…

Ajax技术 实例篇

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 例如&#xff1a;本篇文章通过HtmlAjaxnode技术实现一个简单的Ajax请求案例&#xff0c;为加强对Ajax技术的了解和实操经验 实现效果 这是请求前的前端页面&#xff0c;点击两个Button按钮分别发起不…

Ajax-Ajax基础实例

实例一&#xff1a;点击一个按钮&#xff0c;然后将信息显示到指定的div内。 1、创建一个JAVA web工程&#xff0c;命名为AjaxTest。在webRoot创建一个HTML页面&#xff0c;命名为FirstTest.html&#xff0c;FirstTest.html代码如下&#xff1a; <html><head><t…

Ajax最实用的小例子集合

今天我为大家带来了几个非常实用的ajax小例子&#xff0c;都是在工程中经常用到的实用的例子。适合有基础的同学&#xff0c;废话也不多说了&#xff0c;看代码 哦&#xff0c;对了&#xff0c;所有的例子都是用servletjsp实现的 至于三大框架的&#xff0c;我相信&#xff0c;…

Java 网络编程(大全)

前言必读 读者手册&#xff08;必读&#xff09;_云边的快乐猫的博客-CSDN博客 一、1网络通信的基本模式分为两种 1.CS模式&#xff08;Client---客户端&#xff0c;Server---服务端&#xff09; 客户端是需要程序员去开发的&#xff0c;例如日常使用的各种的APP&#xff0c…

java游戏编程:三路兵线,BOSS走位,代码和视频

一、基本功能&#xff1a; 坦克大战&#xff1a;三路兵线的走&#xff0c;停&#xff0c;走&#xff0c;停。四个版本的飞机大战&#xff1a;多种运动方式。都有代码和视频下载地址。 二、后续改进&#xff1a; 走&#xff0c;停发起攻击&#xff0c;走&#xff0c;停发起攻击…

Java实现石头剪刀布游戏

思路&#xff1a;采取5局3胜制&#xff1b;用两个变量a、b标记&#xff0c;若&#xff0c;第一局电脑胜&#xff0c;则b加1&#xff0c;反之亦然。其中用到int randomNumber new Random().nextInt(4) 随机生成04的一个数&#xff0c;通过生成的数索引数组中的内容&#xff0c;…

Java实现猜数游戏

1 问题 编写一个Java程序&#xff0c;实现以下功能&#xff1a; 2 方法 首先导入java.util包下的Random&#xff0c;让程序随便分配给用户一个数。 再导入java.util包下的Scanner类&#xff0c;构建Scanner对象&#xff0c;以便输入。 利用Random().nextInt()生成一个随机的i…

Java小游戏:飞翔的小鸟 【附源码和素材】

目录 一、项目分析 二、项目展示 1.开始状态 2.运行状态 3.结束状态 三、实现代码 1.游戏启动类 2.地面类 3.小鸟类 4.柱子类 四、代码资源 一、项目分析 创建一个窗口和画板&#xff0c;把画板放到窗口上&#xff0c;在画板上绘画图片 &#xff08;2&#xff09;让小鸟…

Java——猜数字游戏

目录 &#x1f351;前置知识 &#x1f351;题目要求 &#x1f351;代码实现 &#x1f351;测试 &#x1f351;前置知识 既然是猜数字那么就要生成一个随机数 在Java中要生成一个指定范围之内的随机数字有两种方法&#xff1a;一种是调用 Math 类的 random() 方法&…

Java简单实现猜拳游戏

前言 Random类的简单使用 .nextInt()方法&#xff0c;返回伪随机的&#xff0c;均匀分布 int值介于0&#xff08;含&#xff09;和指定值&#xff08;不包括&#xff09;&#xff0c;从该随机数生成器的序列绘制。 public class Demo_02 {//出拳游戏:1表示石头,2表示剪刀,3表…

java实现猜拳游戏

剪刀、石头、布又称“猜丁壳”&#xff0c;古老而简单&#xff0c;这个游戏的主要目的是为了解决争议&#xff0c;因为三者相互制约&#xff0c;因此不论平局几次&#xff0c;总会有胜负的时候。 游戏规则中&#xff0c;石头克剪刀&#xff0c;剪刀克布&#xff0c;布克石头。…