Ajax 复习(一)

Ajax 复习

一、简单

1、 Ajax 入门

前端代码

<script type="text/javascript">
		// 1.创建ajax对象
		var xhr = new XMLHttpRequest();
		// 2.告诉Ajax对象要向哪发送请求,以什么方式发送请求
		// 1)请求方式     2)请求地址
		xhr.open('get', 'http://localhost:3000/first');
		// 3.发送请求
		xhr.send();
		// 4.获取服务器端响应到客户端的数据
		xhr.onload = function (){
			console.log(xhr.responseText)
		}
</script>

对应后台代码

app.get('/first', (req, res) => {  // req 请求参数 , res 相应参数
	res.send('Hello, Ajax');
});

2. 响应数据格式

前端代码

<script type="text/javascript">
		// 1.创建ajax对象
		var xhr = new XMLHttpRequest();
		// 2.告诉Ajax对象要向哪发送请求,以什么方式发送请求
		// 1)请求方式 2)请求地址
		xhr.open('get', 'http://localhost:3000/responseData');
		// 3.发送请求
		xhr.send();
		// 4.获取服务器端响应到客户端的数据
		xhr.onload = function (){
			// console.log(typeof xhr.responseText)
			// 将JSON字符串转换为JSON对象 ==> json.parse
			var responseText = JSON.parse(xhr.responseText);
			// 测试:在控制台输出处理结果
			console.log(responseText)
			// 将数据和html字符串进行拼接
			var str = '<h2>'+ responseText.name +'</h2>';
			// 将拼接的结果追加到页面中
			document.body.innerHTML = str;
		}
	</script>

后端代码

app.get('/responseData', (req, res) => {
	res.send({"name": "zs"});
});

3. 请求参数传递

前端代码

<body>
	<p>
		<input type="text" id="username">
	</p>
	<p>
		<input type="text" id="age">
	</p>
	<p>
		<input type="button" value="提交" id="btn">
	</p>
	<script type="text/javascript">
		// 获取按钮元素
		var btn = document.getElementById('btn');
		// 获取姓名文本框
		var username = document.getElementById('username');
		// 获取年龄文本框
		var age = document.getElementById('age');
		// 为按钮添加点击事件
		btn.onclick = function () {
			// 创建ajax对象
			var xhr = new XMLHttpRequest();
			// 获取用户在文本框中输入的值
			var nameValue = username.value;
			var ageValue = age.value;
			// 拼接请求参数
			var params = 'username='+ nameValue +'&age=' + ageValue;
			// 配置ajax对象
			xhr.open('get', 'http://localhost:3000/get?'+params);
			// 发送请求
			xhr.send();
			// 获取服务器端响应的数据
			xhr.onload = function () {
				console.log(xhr.responseText)
			}
		}
	</script>
</body>

后端代码

app.get('/get', (req, res) => {
	res.send(req.query);
});

4. Post传递

前端代码

<body>
   <p>
   	<input type="text" id="username">
   </p>
   <p>
   	<input type="text" id="age">
   </p>
   <p>
   	<input type="button" value="提交" id="btn">
   </p>
   <script type="text/javascript">
   	// 获取按钮元素
   	var btn = document.getElementById('btn');
   	// 获取姓名文本框
   	var username = document.getElementById('username');
   	// 获取年龄文本框
   	var age = document.getElementById('age');
   	// 为按钮添加点击事件
   	btn.onclick = function () {
   		// 创建ajax对象
   		var xhr = new XMLHttpRequest();
   		// 获取用户在文本框中输入的值
   		var nameValue = username.value;
   		var ageValue = age.value;
   		// 拼接请求参数
   		var params = 'username='+ nameValue +'&age=' + ageValue;
   		// 配置ajax对象
   		xhr.open('post', 'http://localhost:3000/post');
   		// 设置请求参数格式的类型(post请求必须要设置)
   		xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
   		// 发送请求
   		xhr.send(params);
   		// 获取服务器端响应的数据
   		xhr.onload = function () {
   			console.log(xhr.responseText)
   		}
   	}
   </script>
</body>

后端代码

app.post('/post', (req, res) => {
	res.send(req.body);
});

5. 请求参数的格式

注意:get 请求是不能提交 json 对象数据格式的,传统网站的表单提交也是不支持 json 对象数据格式的。

5.1 application/x-www-form-urlencoded

 name=zhangsan&age=20&sex=男

5.3 application/json

 {name: 'zhangsan', age: '20', sex: '男'}

前端代码

<script type="text/javascript">
		// 1.创建ajax对象
		var xhr = new XMLHttpRequest();
		// 2.告诉Ajax对象要向哪发送请求,以什么方式发送请求
		// 1)请求方式 2)请求地址
		xhr.open('post', 'http://localhost:3000/json');
		// 通过请求头告诉服务器端客户端向服务器端传递的请求参数的格式是什么
		xhr.setRequestHeader('Content-Type', 'application/json');
		// JSON.stringify() 将json对象转换为json字符串
		// 3.发送请求
		xhr.send(JSON.stringify({name: 'lisi', age:50}));
		// 4.获取服务器端响应到客户端的数据
		xhr.onload = function (){
			console.log(xhr.responseText)
		}
 </script>

后端代码

app.post('/json', (req, res) => {
	res.send(req.body);
});

6. Ajax 状态码

在创建ajax对象,配置ajax对象,发送请求,以及接收完服务器端响应数据,这个过程中的每一个步骤都会对应一个数值,这个数值就是ajax状态码。

0:请求未初始化(还没有调用open())

1:请求已经建立,但是还没有发送(还没有调用send())

2:请求已经发送

3:请求正在处理中,通常响应中已经有部分数据可以用了

4:响应已经完成,可以获取并使用服务器的响应了

xhr.readyState // 获取Ajax状态码

获取服务器端的相应

onreadystatechange 事件 当 Ajax 状态码发生变化时将自动触发该事件。

<script type="text/javascript">
		var xhr = new XMLHttpRequest();
		// 0 已经创建了ajax对象 但是还没有对ajax对象进行配置
		console.log(xhr.readyState);
		xhr.open('get', 'http://localhost:3000/readystate');
		// 1 已经对ajax对象进行配置 但是还没有发送请求
		console.log(xhr.readyState);

		// 当ajax状态码发生变化的时候出发
		xhr.onreadystatechange = function() {
			// 2 请求已经发送了
			// 3 已经接收到服务器端的部分数据了
			// 4 服务器端的响应数据已经接收完成
			console.log(xhr.readyState);
			// 对ajax状态码进行判断 如果状态码的值为4就代表数据已经接收完成了
			if (xhr.readyState == 4) {
				console.log(xhr.responseText);
			}
		} 
		xhr.send();	
	</script>
区别描述 onload****事件 onreadystatechange****事件
是否兼容IE低版本 不兼容 兼容
是否需要判断Ajax状态码 不需要 需要
被调用次数 一次 多次
posted @ 2020-05-11 19:04  乾子  阅读(472)  评论(0编辑  收藏  举报