使用原生Ajax处理HTML,XML,JSON数据

虽然在上一篇博客中介绍了Ajax的基本知识,但还是需要温习一下相关的知识点,我们还是从最简单的实现步骤讲起

index.html

<!DOCTYPE HTML>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
	window.οnlοad= function(){
		document.getElementsByTagName("a")[0].onclick = function(){
			// 1、创建一个XMlHttpRequest对象
			var xhr = new XMLHttpRequest();
			// 2、准备发送请求的方式和URL
			var method = "GET";
			var url = this.href;
			// 如果请求类型是POST请求,还应该有如下代码
			//xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			// 3、调用XMlHttpRequest对象的open方法
			xhr.open(method, url);
			// 4、调用XMlHttpRequest对象的send方法
			xhr.send(null);
			// 5、为XMlHttpRequest对象添加onreadystatechange属性的响应函数
			xhr.onreadystatechange= function(){
				// 6、判断响应是否完成:readyState属性值为4即代表完成
				if(xhr.readyState == 4){
					// 7、判断响应是否可用:status属性值为200则代表可用
					if(xhr.status == 200){
						alert(xhr.responseText);
					}
				}
			}
			
			// 取消a节点的默认行为
			return false;
		}
	};
</script>
</head>
<body>
<a href="helloAjax.txt">hello Ajax</a>
</body>
</html>

代码中的注释写的很清楚了,实现Ajax的步骤一目了然。所以下面的三个部分我依旧是上代码不做解释。


1、处理HTML数据

main.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>显示名人信息</title>
<style type="text/css">
* {
	font-family: "微软雅黑";
	font-size: 15pt;
}

a {
	color: #ABABAF;
}

h2, h3 {
	color: green;
}
</style>
<script type="text/javascript">
	window.onload = function() {
		var aNodes = document.getElementsByTagName("a");
		for (var i = 0; i < aNodes.length; i++) {
			aNodes[i].onclick = function() {
				var request = new XMLHttpRequest();
				var method = "GET";
				var url = this.href;
				request.open(method, url);
				request.send(null);
				request.onreadystatechange = function() {
					if (request.readyState == 4) {
						if (request.status == 200) {
							// 直接将返回的数据插入到页面
							document.getElementById("details").innerHTML = request.responseText;
						}
					}
				}
				return false;
			}
		}
	}
</script>
</head>
<body>
	<ul>
		<li><a href="file/ming.html">rgx</a>
		<li><a href="file/hong.html">lj</a>
	</ul>
	<div id="details"></div>
</body>
</html>

ming.html

<h2>小明</h2>
<h3>学号:2017116512</h3>
<h3>属性:学渣</h3>

hong.html

<h2>小红</h2>
<h3>学号:2017116505</h3>
<h3>属性:学霸</h3>

2、处理XML数据

main.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>显示名人信息</title>
<style type="text/css">
* {
	font-family: "微软雅黑";
	font-size: 15pt;
}

a {
	color: #ABABAF;
}
h2{
	color: red;
}
h3 {
	color: green;
}
</style>
<script type="text/javascript">
	window.onload = function() {
		var aNodes = document.getElementsByTagName("a");
		for (var i = 0; i < aNodes.length; i++) {
			aNodes[i].onclick = function() {
				var request = new XMLHttpRequest();
				var method = "GET";
				var url = this.href;
				request.open(method, url);
				request.send(null);
				request.onreadystatechange = function() {
					if (request.readyState == 4) {
						if (request.status == 200) {
							/*
							当数据传输格式变为xml的时候,我们应该先接收到数据,再解析数据,然后将解析到的数据,动态的创建
							html元素,再将这些html元素加在div中
							*/
							var result = request.responseXML;
							
							var name  = result.getElementsByTagName("name")[0].firstChild.nodeValue;
							var studentId = result.getElementsByTagName("studentId")[0].firstChild.nodeValue;
							var param = result.getElementsByTagName("param")[0].firstChild.nodeValue;
							
							var name_h2 = document.createElement("h2");
							name_h2.appendChild(document.createTextNode(name));
							var studentId_h3 = document.createElement("h3");
							studentId_h3.appendChild(document.createTextNode(studentId));
							var param_h3 = document.createElement("h3");
							param_h3.appendChild(document.createTextNode(param));
							
							var details = document.getElementById("details");
							details.innerHTML = "";
							details.appendChild(name_h2);
							details.appendChild(studentId_h3);
							details.appendChild(param_h3);
						}
					}
				}
				return false;
			}
		}
	}
</script>
</head>
<body>
	<ul>
		<li><a href="file/ming.xml">rgx</a>
		<li><a href="file/hong.xml">lj</a>
	</ul>
	<div id="details"></div>
</body>
</html>
ming.xml
<?xml version="1.0" encoding="utf-8"?>
<details>
	<name>小明</name>
	<studentId>学号:2017116512</studentId>
	<param>属性:学渣</param>
</details>

hong.html

<?xml version="1.0" encoding="utf-8"?>
<details>
	<name>小红</name>
	<studentId>学号:2017116505</studentId>
	<param>属性:学霸</param>
</details>

3、处理json数据

main.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>显示名人信息</title>
<style type="text/css">
* {
	font-family: "微软雅黑";
	font-size: 15pt;
}

a {
	color: #ABABAF;
}

h2, h3 {
	color: green;
}
</style>
<script type="text/javascript">
	window.onload = function() {
		var aNodes = document.getElementsByTagName("a");
		for (var i = 0; i < aNodes.length; i++) {
			aNodes[i].onclick = function() {
				var request = new XMLHttpRequest();
				var method = "GET";
				var url = this.href;
				request.open(method, url);
				request.send(null);
				request.onreadystatechange = function() {
					if (request.readyState == 4) {
						if (request.status == 200) {
							var result = request.responseText;
							// 把result转换为json对象,eval函数会把字符串当做js代码执行
							var object = eval("("+ result +")");
							
							var name  = object.person.name;
							var studentId = object.person.studentId;
							var param = object.person.param;
							
							var name_h2 = document.createElement("h2");
							name_h2.appendChild(document.createTextNode(name));
							var studentId_h3 = document.createElement("h3");
							studentId_h3.appendChild(document.createTextNode(studentId));
							var param_h3 = document.createElement("h3");
							param_h3.appendChild(document.createTextNode(param));
							
							var details = document.getElementById("details");
							details.innerHTML = "";
							details.appendChild(name_h2);
							details.appendChild(studentId_h3);
							details.appendChild(param_h3);
						}
					}
				}
				return false;
			}
		}
	}
</script>
</head>
<body>
	<ul>
		<li><a href="file/ming.json">rgx</a>
		<li><a href="file/hong.json">lj</a>
	</ul>
	<div id="details"></div>
</body>
</html>

ming.json

{
"person":{
	"name":"小明",
	"studentId":"2017116512",
	"param":"学渣"
}
}

hong.json

{
"person":{
	"name":"小红",
	"studentId":"2017116505",
	"param":"学霸"
}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ajax (Asynchronous JavaScript and XML) 是一种在不刷新整个页面的情况下,使用 JavaScript 发起异步请求,获取或提交数据的技术。原生 Ajax 是指不依赖任何 JavaScript 框架或库,纯粹使用原生 JavaScript 实现 Ajax。下面是一个使用原生 Ajax 进行提交的实例详解。 首先需要创建一个 XMLHttpRequest 对象: ``` var xmlhttp; if (window.XMLHttpRequest) { // IE7+、Firefox、Chrome、Opera、Safari 浏览器执行代码 xmlhttp = new XMLHttpRequest(); } else { // IE6、IE5 浏览器执行代码 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } ``` 然后设置请求方式和请求地址: ``` var url = "submit.php"; // 提交的处理程序 var method = "POST"; // 提交的方式,可以是 GET 或 POST xmlhttp.open(method, url, true); // true 表示异步请求 ``` 接着设置请求头: ``` xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); ``` 这里使用了 application/x-www-form-urlencoded 格式。如果需要提交 JSON 格式的数据,则设置为: ``` xmlhttp.setRequestHeader("Content-type", "application/json"); ``` 接下来设置回调函数: ``` xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { // 请求成功,处理返回的数据 console.log(this.responseText); } }; ``` 当 readyState == 4 时,表示请求已完成;status == 200 表示请求成功。这里只是简单地输出了返回的数据,可以根据具体情况进行处理。 最后发送请求,提交数据: ``` var data = "name=John&age=18"; // 提交的数据,可以是表单数据JSON 数据 xmlhttp.send(data); ``` 这里提交了两个字段,name 和 age,可以根据实际情况修改。当使用 GET 方式提交时,数据需要拼接到 URL 中,例如: ``` var url = "submit.php?name=John&age=18"; xmlhttp.open("GET", url, true); xmlhttp.send(); ``` 以上就是使用原生 Ajax 进行提交的实例详解。需要注意的是,原生 Ajax 还需要处理一些兼容性和安全性问题,例如 IE6、7 下不能并发多个 Ajax 请求,跨域请求需要使用 JSONP 或设置 CORS 等。因此,如果条件允许,建议使用现代的 JavaScript 框架或库来简化 Ajax 的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值