所有分类
  • 所有分类
  • 后端开发
用 jQuery 和 koa2 做 Ajax 请求:从入门到精通

用 jQuery 和 koa2 做 Ajax 请求:从入门到精通

处理返回的json数据通过koa2来实现一个简单的Web服务器。通过路由处理请求处理GET请求,并以json字符串的形式返回数据。处理POST请求,并以json字符串的形式返回数据。至此,一个完整的Ajax请求demo就完成了。

我今天就来讲讲我学怎么用jQuery和koa2做Ajax请求的经历,挺好玩儿的~我会教你们怎么用GET和POST请求,还会分享下我遇到的难题以及解决办法。这样的话,你们对Ajax请求应该能更明白点儿

初识Ajax请求

以前我只懂一点Ajax,主要是做网页的。但后来发现,不懂后台的话,Ajax技术就上不去。所以这次,我决定把前后台都弄明白。

创建简单的HTML页面

搞定!我搞出了个简单的HTML,里头有个神奇按钮可以用来发Ajax请求~这个就是我们项目的客户端界面,用着特别好用,你想发啥数据,直接一点就完事。

使用jQuery发送Ajax请求

jquery这玩意儿真牛!它把Ajax流程搞得特简单,还教我们咋用GET或POST发请求,还有JSON数据处理,实在太好用!这下子,我编程技能都提升不少!对请求和响应有更深理解!

利用koa2搭建后端服务器

nbsp;html>
 
 Document
 
 

 

Hello World

                 
 
       

我搞了个小巧玲珑的Web服务器,不仅能快速响应前端传来的各种请求,还能轻松地把数据转换成JSON格式再发回给他们。

处理GET请求

var searchButton = $('#search');
var personNumber = $('#person-number').val();
searchButton.click(() => {
 var number = $('#search-number').val();
 $.ajax({
 type: 'GET',
 url: `person/?number=${number}`
 })
});

搞定GET请求提取查询参数的方法和回传正确信息到前端这件事了。深以为然,原来后端就是按照前端所需的数据来提供服务滴。

var saveButton = $('#save').click(() => {
 var number = $('#person-number').val();
 var name = $('#person-name').val();
 $.ajax({
 type: 'POST',
 url: 'person',
 dataType: 'json',
 data: {
  number: number,
  name: name
 }
 })
});

处理POST请求

POST和GET不同点在于数据要放在请求内容里。要用到像koa-body这样的工具来分析,学懂之后就没问题!这个过程中学到了怎么对付各种奇奇怪怪的请求格式。

用 jQuery 和 koa2 做 Ajax 请求:从入门到精通

// Ajax完成事件
$(document).ajaxComplete(function(event, xhr, settings) {
 var obj = JSON.parse(xhr.responseText);
 var data = obj.data;
 if(obj.success && data['number']){
 $('#message').text(`姓名:${data['name']} 编号:${data['number']}`);
 } else {
 $('#message').text(data);
 }
});

处理返回的JSON数据

GET或POST都行,搞懂json数据才是王道!我们发现用jQuery的ajaxComplete事件能搞定。以后不管什么信息,你都可以在网页上轻轻松松拿到并展示啦~

实战案例:人员信息管理

const path = require('path');
const serve = require('koa-static');
const Koa = require('koa');
const koaBody = require('koa-body'); // 解析 multipart、urlencoded和json格式的请求体
const router = require('./router.js');
const app = new Koa();
app.use(serve(path.join(dirname, './dist'))); // 读取前端静态页面
app.use(koaBody()); // 通过该中间件解析POST请求的请求体才能拿到数据
app.use(router.routes());
app.listen(3000);
console.log('listening on port 3000');

这个活儿就是个员工档案系统。操作简单得很,只要输编号跟名字就能存或者找东西。干完后,不仅我的编程技术提高了不少,还学到了怎么根据客户需求开发新功能。

遇到的问题及解决方法

router.get('/person', (ctx, next) => {
 let number = ctx.query.number;
 let temp = {};
 // 判断编号是否存在
 temp.data = /^[0-9]+$/.test(number) ? (people[number] ? people[number] : '编号不存在' ) : '编号格式错误';
 temp.success = !!temp.data['number'];
 ctx.body = JSON.stringify(temp); // 响应请求,发送处理后的信息给客户端
});

老是碰上乱七八糟的事,排版错,编号重复之类的。一个个搞定后,感觉对Ajax请求更明白了些,实战经验也多了。

总结与反思

选了那门课以后,我就会用jQuery和koa2处理AJAX请求!这种小技巧让我不管是搞前端还是后台都没压力。学东西,不光得死记硬背,还得多动手实践,这样才能越做越好。

router.post('/person', (ctx, next) => {
 let query = ctx.request.body;
 let temp = {};
 // 编号必须是数字并且大于0,名字必须存在
 if (/^[0-9]+$/.test(query.number) && query.name && parseInt(query.number, 10) > 0) {
 // 判断编号是否存在
 if (!people[query.number]) {
  // 保存信息
  people[query.number] = {
  number: parseInt(query.number, 10),
  name: query.name
  };
  temp.success = true;
  temp.data = '保存成功';
 } else {
  temp.success = false;
  temp.data = '编号已存在';
 }
 } else {
 temp.success = false;
 temp.data = '信息格式错误';
 }
 ctx.body = JSON.stringify(temp);
});

提问与互动

有没有什么问题超有意思的,你又是咋解决的?快来分享给大伙儿,这样我们都能学到东西!记得关注点赞或者分享文章,让更多人受益哈。

const Router = require('koa-router');
const router = new Router();
// 初始的人员信息对象,信息从这里储存和读取。
const people = {
 1: { number: 1, name: 'Dan Friedell' },
 2: { number: 2, name: 'Anna Matteo' },
 3: { number: 3, name: 'Susan Shand' },
 4: { number: 4, name: 'Bryan Lynn' },
 5: { number: 5, name: 'Mario Ritter' },
};
router.get('/person', (ctx, next) => {
 let number = ctx.query.number;
 let temp = {}; // 要返回给客户端的对象,通过success属性判断存取是否成功。
 // 判断编号是否存在
 temp.data = /^[0-9]+$/.test(number) ? (people[number] ? people[number] : '编号不存在' ) : '编号格式错误';
 temp.success = !!temp.data['number'];
 ctx.body = JSON.stringify(temp);
});
router.post('/person', (ctx, next) => {
 let query = ctx.request.body;
 let temp = {};
 // 编号必须是数字并且大于0,名字必须存在
 if (/^[0-9]+$/.test(query.number) && query.name && parseInt(query.number, 10) > 0) {
 // 判断编号是否存在
 if (!people[query.number]) {
  // 保存信息
  people[query.number] = {
  number: parseInt(query.number, 10),
  name: query.name
  };
  temp.success = true;
  temp.data = '保存成功';
 } else {
  temp.success = false;
  temp.data = '编号已存在';
 }
 } else {
 temp.success = false;
 temp.data = '信息格式错误';
 }
 ctx.body = JSON.stringify(temp);
});
module.exports = router;

原文链接:https://www.icz.com/technicalinformation/web/2024/06/16965.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?