首先举个例子
一个登录界面上有注册界面,输入用户名和密码,点击注册按钮,如果用户名重复则提示失败。
需要写一个form表单,里面有需要用到的input和button


action:设置请求地址url
method:设置请求方式
form表单发送请求会刷新页面,如果用preventDefault()也会把添加数据这一默认事件阻止,所以使用Ajax来操作
get请求 将参数拼接在url后面(也就是路径中),有大小限制,4K左右的大小。
请求参数可以在地址栏看到,不安全。
post请求 将参数放在请求体中,没有大小限制。相对安全。

  1. <!--
  2. action:设置请求地址url
  3. method:设置请求方式
  4. localhost: 本机地址的域名 对应的ip127.0.0.1
  5. 8080:端口号
  6. form表单发送请求会刷新页面
  7. get请求 将参数拼接在url后面,有大小限制,4K左右的大小。
  8. 请求参数可以在地址栏看到,不安全。
  9. post请求 将参数放在请求体中,没有大小限制。相对安全。
  10. -->
  11. <form action="" method=""></form>
  12. <form action="http://localhost:8080/register" method="get" id="myform">
  13. <input type="text" name="username">
  14. <input type="text" name="password">
  15. <input type="submit" value="注册">
  16. </form>
  17. <script>
  18. myform.onsubmit = function(e){
  19. // e.preventDefault()
  20. }
  21. </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 时,表示响应已就绪:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <form action="" id="myform">
  11. <input type="text" name="username" id="uname">
  12. <span id="error"></span><br>
  13. <input type="password" name="password" id="psw"><br>
  14. <input type="submit" value="注册">
  15. </form>
  16. <script>
  17. // 接口文档:
  18. // 请求方式: get
  19. // 请求路径: http://localhost:8080/register
  20. // 请求参数: 必填参数 username,password
  21. // 返回的数据:status 值为1,表述注册成功;值为0,表示用户名已存在
  22. // msg: 说明注册的状态信息
  23. myform.onsubmit = function(e){
  24. e.preventDefault(); //阻止页面刷新的默认行为
  25. // 使用 ajax 发送get请求
  26. // 1.创建请求对象
  27. var xhr = new XMLHttpRequest();
  28. // 2.设置请求方式和请求路径
  29. xhr.open('GET',`http://localhost:8080/register?username=${uname.value}&password=${psw.value}`);
  30. // 3.发送请求
  31. xhr.send();
  32. // 4.接收服务端返回的数据
  33. xhr.onreadystatechange = function(){
  34. if (xhr.readyState == 4 && xhr.status == 200) {
  35. // console.log(xhr.responseText);
  36. var data = JSON.parse(xhr.responseText);
  37. if (data.status == 1) {
  38. // 注册成功
  39. // 跳转到登录页面
  40. location.href = './login.html'
  41. }else{
  42. // 用户名已存在
  43. error.innerHTML = data.msg;
  44. }
  45. }
  46. }
  47. }
  48. </script>
  49. </body>
  50. </html>

post请求例子

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <form action="" id="myform">
  11. <input type="text" name="username" id="uname">
  12. <span id="error"></span><br>
  13. <input type="password" name="password" id="psw"><br>
  14. <input type="submit" value="注册">
  15. </form>
  16. <script>
  17. // 接口文档
  18. // 请求方式:get
  19. // 请求路径:http://localhost:8080/register
  20. // 请求参数:必填参数username,password
  21. // 返回的数据:status值为1表示注册成功,0表示失败,用户名已存在;msg:说明注册的状态信息
  22. myform.onsubmit = function (e) {
  23. e.oreventDefault();
  24. // 使用Ajax发送post请求
  25. // 1.创建请求对象
  26. var xhr = new XMLHttpRequest()
  27. // 2.设置请求方式 请求路径
  28. xhr.open('post', 'http://localhost:8080/register')
  29. // 3.设置参数
  30. // 方式一
  31. // var param = `username=${uname.value}&password=${psw.value}`
  32. // // 定义请求头中参数的格式类型
  33. // xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
  34. // 方式二
  35. var param={
  36. username:uname.value,
  37. password:psw.value
  38. }
  39. param=JSON.stringify(param)
  40. xhr.setRequestHeader('Content-type','application/json')
  41. // 4.发送请求
  42. xhr.send(param)
  43. // 5.接收服务端返回的数据
  44. xhr.onreadystatechange = function () {
  45. if (xhr.readyState == 4 && xhr.status == 200) {
  46. var data = JSON.parse(xhr.responseText)
  47. if (data.status == 1) {
  48. alert('注册成功')
  49. // 跳转到登录页面
  50. location.href = './login.html'
  51. } else {
  52. // alert('该用户名已存在')
  53. error.innerHTML = data.msg
  54. }
  55. }
  56. }
  57. }
  58. </script>
  59. </body>
  60. </html>