koa中使用ajax,jQuery+koa2如何实现Ajax请求

jQuery+koa2如何实现Ajax请求

发布时间:2020-09-23 15:04:30

来源:亿速云

阅读:62

作者:小新

这篇文章将为大家详细讲解有关jQuery+koa2如何实现Ajax请求,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

之前写Ajax代码只管前端的实现,感觉这样导致自己对Ajax的请求的理解不够深入,所以写了这个从前端到后端的Ajax实现小demo,分别实现简单的GET和POST请求,加深下对前后端交互的理解。

技术栈koa2

jQuer

需求

某些逻辑可以直接在前端处理,这里发给后端处理是为了更好地理解Ajax请求。

POST

通过填写编号和姓名并发送POST请求来保存人员信息,当信息未填写或填写不正确时给出格式错误的提醒;当信息填写正确但编号已存在时给出编号已存在的提醒;当信息填写正确且编号不存在时显示保存成功。

GET

通过填写编号并发送GET请求来查询人员信息,当编号未填写或填写不正确时给出格式错误的提醒;当编号填写正确且编号已存在时返回人员信息;当信息填写正确但编号不存在时显示人员不存在的错误提醒。

文件列表distindex.html

index.js

server.js

router.js

前端实现

html页面

index.html,简单的html页面,通过点击按钮发送json格式的Ajax请求:

Document

Hello World

编号

姓名

保存信息

编号

查询信息

jQuery发送Ajax请求

发送GET请求:var searchButton = $('#search');

var personNumber = $('#person-number').val();

searchButton.click(() => {

var number = $('#search-number').val();

$.ajax({

type: 'GET',

url: `person/?number=${number}`

})

});

发送POST请求: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

}

})

});

处理返回的json数据

通过ajaxComplete事件处理返回的数据,这个事件只能绑定到document对象上:// 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);

}

});

后端实现

web服务器

通过koa2来实现一个简单的Web服务器。server.js: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');

通过路由处理请求

处理GET请求,并以json字符串的形式返回数据。通过GET请求发送的查询参数会以对象字面量的形式保存在ctx.query属性中: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); // 响应请求,发送处理后的信息给客户端

});

处理POST请求,并以json字符串的形式返回数据。POST请求的数据保存在请求的请求体中,需要用koa-body中间件自动解析后才能通过ctx.request.body获取请求的数据: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);

});

完整的router.js: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;

测试

在控制台输入node server.js可以看到服务器在3000端口运行了,打开浏览器输入localhost:3000就可以看到一个简单的前端页面:

7349280ae3be0cd4b25da269a5e2386f.png

查询数据:

07897ed4a45b70827bbd948b7c5d2a11.png

15be351b2aa893cc752975ff68e05e9c.png

保存数据:

c8952249bfac8094c988b3d5aa588407.png

再次查询数据:

162c46e63b75ad1f1da3a84eddb96343.png

至此,一个完整的Ajax请求demo就完成了。

关于jQuery+koa2如何实现Ajax请求就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值