首先举个例子
一个登录界面上有注册界面,输入用户名和密码,点击注册按钮,如果用户名重复则提示失败。
需要写一个form表单,里面有需要用到的input和button
action:设置请求地址url
method:设置请求方式
form表单发送请求会刷新页面,如果用preventDefault()也会把添加数据这一默认事件阻止,所以使用Ajax来操作
get请求 将参数拼接在url后面(也就是路径中),有大小限制,4K左右的大小。
请求参数可以在地址栏看到,不安全。
post请求 将参数放在请求体中,没有大小限制。相对安全。
<!--
action:设置请求地址url
method:设置请求方式
localhost: 本机地址的域名 对应的ip:127.0.0.1
8080:端口号
form表单发送请求会刷新页面
get请求 将参数拼接在url后面,有大小限制,4K左右的大小。
请求参数可以在地址栏看到,不安全。
post请求 将参数放在请求体中,没有大小限制。相对安全。
-->
<form action="" method=""></form>
<form action="http://localhost:8080/register" method="get" id="myform">
<input type="text" name="username">
<input type="text" name="password">
<input type="submit" value="注册">
</form>
<script>
myform.onsubmit = function(e){
// e.preventDefault()
}
</script>
网址的构成:
(1)协议: http https ,超文本传输协议,规定了网络上传输数据的格式。
请求:请求行(请求方式 get post)
请求头
请求体(post请求参数,放在请求体中)
响应:响应行 :状态码
响应头
响应体 :存放的是服务端返回的数据
(2)域名: 每个域名对应的都有一个ip
DNS 解析器:将域名解析为对应的ip
(3)端口号: 代表不同的服务
(4)资源路径
(5)查询字符串:请求参数 放在?后面,参数之间用&链接
Ajax发送get请求需要以下几个步骤:
1.创建请求对象 var x = new XMLHttpRequeat()
2.设置请求方式和请求路径 x.open(‘get或post’,[http://localhost:8080/register?username=${uname.value}&password=${psw.value}](http://localhost:8080/register?username=${uname.value}&password=${psw.value})
)
3.发送请求 x.send()
4.接收服务器返回的数据
x.onreadystatechange=function(){
if (x.readyState == 4 && x.status == 200) {
responseText:获取到的服务器的数据,response Text是获得字符串形式的响应数据
responseXML:获取到的服务器的数据,responseXML是获得XML形式的响应数据
var data = JSON.parse(x.responseText);
if (data.status == XXX) {
// 注册成功
// 跳转到登录页面
location.href = ‘./login.html’
}else{
// 用户名已存在
error.innerHTML = data.msg;
}
}
}
// 接口文档:
// 请求方式: get
// 请求路径: http://localhost:8080/register
// 请求参数: 必填参数 username,password
// 返回的数据:status 值为1,表述注册成功;值为0,表示用户名已存在
// msg: 说明注册的状态信息
onreadystatechange 事件
当请求被发送到服务器时,我们需要执行一些基于响应的任务。
每当 readyState 改变时,就会触发 onreadystatechange 事件。
readyState 属性存有 XMLHttpRequest 的状态信息。
下面是 XMLHttpRequest 对象的三个重要的属性:
属性 | 描述 |
---|---|
onreadystatechange | 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。 |
readyState | 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。 - 0: 请求未初始化 - 1: 服务器连接已建立 - 2: 请求已接收 - 3: 请求处理中 - 4: 请求已完成,且响应已就绪 |
status | 200: “OK” 404: 未找到页面 |
在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。
当 readyState 等于 4 且状态为 200 时,表示响应已就绪:
<!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>
</head>
<body>
<form action="" id="myform">
<input type="text" name="username" id="uname">
<span id="error"></span><br>
<input type="password" name="password" id="psw"><br>
<input type="submit" value="注册">
</form>
<script>
// 接口文档:
// 请求方式: get
// 请求路径: http://localhost:8080/register
// 请求参数: 必填参数 username,password
// 返回的数据:status 值为1,表述注册成功;值为0,表示用户名已存在
// msg: 说明注册的状态信息
myform.onsubmit = function(e){
e.preventDefault(); //阻止页面刷新的默认行为
// 使用 ajax 发送get请求
// 1.创建请求对象
var xhr = new XMLHttpRequest();
// 2.设置请求方式和请求路径
xhr.open('GET',`http://localhost:8080/register?username=${uname.value}&password=${psw.value}`);
// 3.发送请求
xhr.send();
// 4.接收服务端返回的数据
xhr.onreadystatechange = function(){
if (xhr.readyState == 4 && xhr.status == 200) {
// console.log(xhr.responseText);
var data = JSON.parse(xhr.responseText);
if (data.status == 1) {
// 注册成功
// 跳转到登录页面
location.href = './login.html'
}else{
// 用户名已存在
error.innerHTML = data.msg;
}
}
}
}
</script>
</body>
</html>
post请求例子
<!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>
</head>
<body>
<form action="" id="myform">
<input type="text" name="username" id="uname">
<span id="error"></span><br>
<input type="password" name="password" id="psw"><br>
<input type="submit" value="注册">
</form>
<script>
// 接口文档
// 请求方式:get
// 请求路径:http://localhost:8080/register
// 请求参数:必填参数username,password
// 返回的数据:status值为1表示注册成功,0表示失败,用户名已存在;msg:说明注册的状态信息
myform.onsubmit = function (e) {
e.oreventDefault();
// 使用Ajax发送post请求
// 1.创建请求对象
var xhr = new XMLHttpRequest()
// 2.设置请求方式 请求路径
xhr.open('post', 'http://localhost:8080/register')
// 3.设置参数
// 方式一
// var param = `username=${uname.value}&password=${psw.value}`
// // 定义请求头中参数的格式类型
// xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
// 方式二
var param={
username:uname.value,
password:psw.value
}
param=JSON.stringify(param)
xhr.setRequestHeader('Content-type','application/json')
// 4.发送请求
xhr.send(param)
// 5.接收服务端返回的数据
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
var data = JSON.parse(xhr.responseText)
if (data.status == 1) {
alert('注册成功')
// 跳转到登录页面
location.href = './login.html'
} else {
// alert('该用户名已存在')
error.innerHTML = data.msg
}
}
}
}
</script>
</body>
</html>