详解B/S下前后端交互

现代生活下,使用浏览器访问网站是必不可少的事情,当我们在浏览器输入一个网址,等待一会就会看到该网站的内容,那么在这个等待的过程中发生了什么,前后端是如何进行交互的?下面将以一个简单登录的页面详细为大家解释一下前后端交互的过程

前端和后端

浏览器显示的网页即为web前端界面,提供用户与网站进行交互的可视化接口,而web后端服务主要指在服务器中执行的逻辑运算和数据处理,它为前端提供着访问服务。所谓的前后端只是从代码被执行的位置来区分的,前端代码在用户面前被执行,后端代码在遥远的服务器上被执行。但是,无论前端或后端代码,都是存放在服务器上的,只是当浏览器请求的时候,从服务器发送过去而已。

在这里插入图片描述

前后端简单登录页面实现流程

  1. 前端通过事件获取到用户输入的内容
  2. 事件里面获取用户输入的用户名和密码
  3. 表单验证(本文没做验证)
  4. 发送请求
  5. 后端接受前端传来的数据
  6. 后端操作数据,查询或修改数据库
  7. 后端响应结果发给前端
  8. 前端接收后端响应的结果并做处理
  9. 前端根据处理结果渲染页面

如何发送一个请求?

相信大家看了流程之后感觉1,2,3都好理解,那么前端究竟是如何发送一个请求的,又是如何知道是登录成功还是登录失败,我们就不得不先了解两个知识点 Ajax 和 JSON

Ajax介绍

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。目前jQuery库提供多个与AJAX相关的方法。通过 jQuery AJAX方法,能够使用HTTP Get和HTTP Post从远程服务器上请求文本、HTML、XML或JSON,同时能够把这些外部数据直接载入网页被选元素中。
在原生JS中如何发送一个Ajax请求?

 	// 1. 创建一个 ajax 对象
    //    这个对象就能帮我们发送一个 ajax 请求
    var xhr = new XMLHttpRequest()

    // 2. 配置请求信息(这里有的请求方式有GET 和 POST两种,这里以GET请求为例)
    //    以 GET 的请求方式 向 ajax.php 文件发起一个请求
    xhr.open('GET', './ajax.php')

    // 3. 发送请求
    xhr.send()

    // 4. 接受响应
    xhr.onload = function () {
      // 这个函数会在当前这个 ajax 请求完成的时候触发
      // 这个 ajax 请求一完成, 那么就会触发这个函数了
      // 我们再这里就能得到后端给返回的数据
      console.log('请求已经完成了')
      console.log(xhr)
    }

JSON介绍

对于交互的数据格式,采用JSON(JavaScript Object Notation),它是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。JSON键值的层次结构简洁清晰,易于阅读和编写,使得 JSON 成为理想的数据交换语言。JSON数据格式如下:

{//JSON键/值对
"key1":"value1",
"key2":"value2",
"key3":"value3"
}

前端登录代码实现

html 代码如下

<body>
  <div class="login-wrap">
  <h1> 登 录 </h1>
  <form class="login">
    <!-- span 作为登录失败的时候显示-->
    <span>用户名或密码错误</span>
    <input type="text" class="username" placeholder="请输入用户名">
    <input type="password" class="password" placeholder="请输入密码">
    <button>登 录</button>
  </form>
  </div>
</body>

JavaScript (jQuery) 代码如下(发送一个 POST 请求)

        $(function(){
            $(".login>button").click(function(e){
                e.preventDefault();
                $.ajax({
                    url:"./login.php",
                    type:"POST",
                    data:{
                        username:$(".username").val(),
                        password:$(".password").val()
                    },
                    // json 格式的数据类型
                    dataType:"json",
                }).then(function(res){
                    //接受并解析后台返回的数据
                    console.log(res);
                })
            })
        })

前端界面如下

在这里插入图片描述

后端代码实现(PHP)

<?php
  // 1. 接受前端传递来的参数
  //    因为是 POST 请求, 就在 $_POST 里面获取
  $uname = $_POST['username'];
  $upass = $_POST['password'];

  // 2. 去数据库里面查询有没有这个数据了
  // 2-1. 连接数据库
  $link = mysqli_connect('localhost', 'root', 'root', 'test2');

  // 2-2. 执行 sql 语句
  $sql = "SELECT * FROM `login` WHERE `username`='$uname' AND `password`='$upass'";
  $res = mysqli_query($link, $sql);

  // 2-3. 解析结果
  //      因为是查询, 所以要解析结果
  $row = mysqli_fetch_assoc($res);

  // 2-4. 断开数据库连接
  mysqli_close($link);

  // 3. 根据有没有数据给前端返回结果
  // 如果成功, 我返回一个关联型数组
  // 如果失败, 我也返回一个关联型数组
  if ($row) {
    $arr = array("message" => "登录成功", "code" => 1);
  } else {
    $arr = array("message" => "登录失败", "code" => 0);
  }

  // 把这关联型数组返回
  print_r(json_encode($arr));

?>

登录成功或失败

我们分别可以看到后台返回的数据在控制台打印的结果,因为jQuery自带的功能就已经把json格式的数据给我们解析成了对象,这样我们就可以直接操作对象了
登录成功
登录失败

总结

前端将请求数据通过 Ajax 方法用HTTP发送给后端,后端接受到数据后作出响应处理并返回 JSON 格式的结果,前端将 JSON 格式的结果进行解析,并作出进一步的处理,将处理结果渲染在 HTML 页面中,至此整个一个请求到此结束

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Ajax前后端交互中,可以使用Ajax来上传文件。一种常见的方法是使用FormData对象来传输文件数据。首先,你需要创建一个FormData对象,并将文件添加到该对象中。然后,你可以使用Ajax发送POST请求,将FormData对象作为请求的数据发送到服务器。在服务器端,你可以使用相应的后端语言来处理接收到的文件数据。通过这种方式,你可以实现文件的上传和后端的处理。\[1\]另外,你也可以使用一些第三方库,如axios或jQuery,来简化文件上传的过程。这些库提供了更方便的方法来处理文件上传的细节,使得代码更加简洁和易于维护。\[2\]总之,通过Ajax前后端交互,你可以实现文件的上传和后端的处理,提供了更好的用户体验和数据交互的能力。 #### 引用[.reference_title] - *1* [AJAX前后端交互](https://blog.csdn.net/m0_60280770/article/details/119517580)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Ajax前后端交互利器详解(一)](https://blog.csdn.net/Augenstern_QXL/article/details/120116296)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值