Ajax前后端交互实例

发布时间 2023-10-18 23:41:35作者: 何平安

什么是前后端联调?

在我们开发的过程中,发送请求的ajax数据都不是后端返回的真数据,而是我们自己通过接口mock模拟的假数据,当前端的代码编写完成后,后端的接口也写好后,我们就需要把mock数据换点,尝试使用后端提供的数据,进行一个前后端的调试,我们会把这个过程叫做前后端接口联调。

 

 真正的零基础都是从安装开始的AwA

编译器选择IDEA:附赠激活码:IntelliJ IDEA2023.2 破解 永久激活 最新版IDEA激活 亲测可用! - 爱激活网 (aijihuo.cn)

Node.js: 下载 | Node.js 中文网 (nodejs.cn)选择对应版本,安装程序除了安装地址以外其它都是默认就行

nginx:nginx: download

MySQL:超详细MySQL安装及基本使用教程 - 知乎 (zhihu.com)

先来介绍下前后端是怎么连接交互的:

一般是前端设计界面,向后端发送一些请求,而发送请求的技术选用的是Ajax,但现在流行的一般都是先转换成Json格式来交互数据的,

Ajax

先来说说什么是Ajax

异步 JavaScript 和 XML,或 Ajax 本身不是一种技术,而是一种将一些现有技术结合起来使用的方法,包括:HTML 或 XHTMLCSSJavaScriptDOMXMLXSLT、以及最重要的 XMLHttpRequest 对象。当使用结合了这些技术的 Ajax 模型以后,网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面。这使得程序能够更快地回应用户的操作。Ajax 最吸引人的特性是它的“异步”性质,这意味着它可以与服务器通信、交换数据并更新页面,而无需刷新页面。

尽管 Ajax 中的 X 代表 XML,但是 JSON 才是首选,因为它更加轻量,而且是用 JavaScript 编写的。在 Ajax 模型中,JSON 和 XML 都被用来包装信息

HTTP请求报文格式与参数

行:         POST /s?ie=utf-8  HTTP/1.1

头:         Host: hepingan.top

    Cookie: a=name=hepingan

    Content-type: application/x-www-form-urlencoded

    User-Agent: chrome 83

空行

体   username=admin&password=admin

上面的就是一个http请求的例子,下面就是响应报文的例子

行  HTTP/1.1  200  OK

头  Content-Type: text/html;charset=utf-8

   Content-length: 2048

   Content-encoding: gzip

空行

体  <html>

     ....

   </html>

 

首先先搞后端,我用的是java 的springboot框架,创建时选择如下配置:

springboot的版本尽量选低点,不然不兼容出问题。jdk版本我选的是11.

打开pom.xml并在denpendences里引入mybatis的坐标:

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter-test</artifactId>
            <version>2.3.1</version>
            <scope>test</scope>
        </dependency>

然后将application的文件格式给成yml,并输入:

server:
  port: 9090


spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    password: 1234
    username: root
    url: jdbc:mysql://localhost:3306/hh?useUnicode=true&characterEncoding=utf-8&

 password 和url的数据库名记得换成自己的!我这里写的后端端口为9090;

引入数据库:

右边选择数据库并添加数据源,选择mysql。

username输入root,password就是你的密码。

然后创建一个表,mysql创建语句:

create table teacher
(
    id int unsigned primary key auto_increment comment '主键ID',
    name varchar(20) ,
    age  int         
);

然后再在idea自带的数据库表格编辑里添加几个数据方便测试。

然后创建下面的包:

先编辑TeacherController:

@RestController
@RequestMapping("/teacher")
public class TeacherController {
    @Autowired
    private TeacherMapper teacherMapper;

    @GetMapping("/")
    public List<Teacher> ListTeacher(){
        List<Teacher> list = teacherMapper.ListTeacher();
        return list;
    }

    @GetMapping("/{id}")
    public Teacher getTeacher(@PathVariable("id") Long id){
        return teacherMapper.getTeacher(id);
    }

大概意思就是一个/teacher的接口里有get形式查询teacher表的请求和根据id查询的接口。

然后再在TeacherMapper里编写:

@Mapper
public interface TeacherMapper {

    @Select("select * from teacher")
    List<Teacher> ListTeacher();


    @Select("select *from teacher where id=#{id}")
    Teacher getTeacher(Long id);

然后启动项目:

然后在浏览器输入localhost:9090/teacher/和localhost:9090/teacher/1,如果有结果就说明成功了。

接下来是前端:

直接随便创建个html文件,里面就编写:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>ajax</title>
	</head>
	<body>
		<body>
		  <div id="dataContainer"></div>
		</body>
		<script>
			var xhr = new XMLHttpRequest();
			var dataContainer = document.getElementById('dataContainer');
			
			xhr.onreadystatechange = function() {
			  if(xhr.readyState === 4) {
			    if(xhr.status === 200) {
			      // 请求成功,处理返回的数据
			      dataContainer.innerHTML = xhr.responseText;
			    } else {
			      // 请求失败,处理错误
			      console.error(xhr.statusText);
			    }
			  }
			};
			
			xhr.open('GET', 'http://localhost:9090/teacher/', true);
			xhr.send();
		</script>
	</body>
</html>

然后再运行浏览器打开就可以看到成果了。