Ajax基础:向服务器端传递post请求参数(普通类型+json类型)
(普通类型的请求数据)
客户端 04ajax.html 的代码:
<body>
<p><input type="text" name="" id="username"></p>
<p><input type="text" name="" id="age"></p>
<p><input type="button" name="" value="提交" id="btn"></p>
<script>
var btn = document.getElementById('btn');
var usernameV = document.getElementById('username');
var ageV = document.getElementById("age");
btn.addEventListener('click', function() {
var name = usernameV.value;
var age = ageV.value;
var params = 'username=' + name + '&age=' + age;
// 创建ajax对象
var aj = new XMLHttpRequest();
// 配置ajax对象
aj.open('post', 'http://localhost:3000/post');
// 如果post请求参数是【params】中的格式,那么这里就要设置成下面的格式,固定写法
aj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// 发送请求
aj.send(params);
// 获取服务器端响应的数据
aj.onload = function() {
console.log(aj.responseText);
}
})
</script>
</body>
如果post请求参数是:多个参数用&连接的格式,那么这里就要设置成下面的格式,固定写法
aj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
服务器端 app.js 代码:(普通类型的响应方式)
const express = require('express');
const path=require('path');
const bodyParser = require('body-parser');
const app = express();
//指明静态文件目录位置,以便浏览器中对(客户端)静态文件的加载
app.use(express.static(path.join(__dirname, 'public')));
// 调用urlencoded方法就意味着要解析application/x-www-form-urlencoded格式的参数
app.use(bodyParser.urlencoded({ extended: false }));
app.post('/post', (req, res) => {
res.send(req.body);
})
app.listen(3000);
console.log('3000已启动');
(json类型的请求数据)
客户端 05ajax.html 的代码:
<body>
<!-- 注意,请求必须以字符串的格式进行传递,所以如果要传递json类型的数据,必须先将其转换为字符串格式 -->
<script>
// 创建ajax对象
var aj = new XMLHttpRequest();
// 配置ajax对象,如果是传递json类型的数据,请求类型必须得是post
aj.open('post', 'http://localhost:3000/json');
// 传递json类型的数据,要设置成下面的格式,固定写法
aj.setRequestHeader('Content-Type', 'application/json');
// 发送请求,借助stringify来转为字符串格式进行传递
aj.send(JSON.stringify({
name: 'xibing',
age: 20
}));
// 获取服务器端响应的数据
aj.onload = function() {
console.log(aj.responseText);
}
</script>
</body>
使用JSON.stringify()来对jsonl类型的数据进行类型转换,以便符合send()的参数类型规则
服务器端 app.js 代码:(json类型的响应方式)
const express = require('express');
const path=require('path');
const bodyParser = require('body-parser');
const app = express();
//指明静态文件目录位置,以便浏览器中对(客户端)静态文件的加载
app.use(express.static(path.join(__dirname, 'public')));
// 如果想要接收json类型的请求参数,需要改调用json()方法
app.use(bodyParser.json());
app.post('/json', (req, res) => {
res.send(req.body);
})
app.listen(3000);
console.log('3000已启动');
总结 :
两种请求方式(get/post)相比:
1、get请求方式中不用设置请求头信息
post请求方式必须要设置:(普通类型 or json类型)
aj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
aj.setRequestHeader('Content-Type', 'application/json');
2、get请求方式中将请求参数挂于 【请求地址?】 之后,多个参数用&连接;send()无参数
post请求方式将请求参数置于send()中传递(遇到json类型需要转为字符串再传递)
因为send()方法只能传递字符串类型的数据---借助JSON.stringify()方法转换类型
3、服务器端对get的响应无需配置用什么方法去解析什么类型的参数,req.query直接获取
对post的响应需要配置:(当然,用于解析post的body-parser第三方模块不能少)
对于普通类型:app.use(bodyParser.urlencoded({ extended: false }));
对于json类型:app.use(bodyParser.json());