基于Ajax的Todos项目——更新用户状态

在这里插入图片描述

客户端代码
这里通过Ajax请求将状态更新信息发送到服务器,客户端根据服务器返回
状态更新数组中对应的状态值(这里其实也可以直接将status值给数组)

        //当复选框状态改变
        taskBox.on('change', '.toggle', function () {
            //通过方法得到当前的选中与否 is代表复选框是否选中(注意这里:不能省略)返回boolean(true,false)
            var status = $(this).is(':checked');
            //获取点击任务的id  siblings拿到的是同级兄弟元素 .attr拿到其属性值
            var id = $(this).siblings('button').attr('data-id');
            //使用ajax向服务器发送数据更新用户状态
            $.ajax({
                url: '/todo/modifyTask',
                type: 'post',
                data: JSON.stringify({
                    _id: id,
                    completed: status
                }),
                contentType: 'application/json',
                //服务器返回的是类似于data格式的数据
                success: function (response) {
                    //获取点击任务id
                    var task = taskAry.findIndex(item => item._id == id);
                    //根据服务器返回状态更改列表状态
                    taskAry[task].completed = response.completed;
                    //将任务数据更新到页面
                    render();
                }
            })
        })

这里通过判断数组中是否为completed来为li添加样式(删除线)
同样给复选框添加选中与否

 <!-- 任务列表模板 -->
    <script type="text/html" id="taskTpl">
        {{each tasks}}
        <li class="{{$value.completed ? 'completed' : ''}}">
            <div class="view">
                <input class="toggle" type="checkbox" {{$value.completed ? 'checked' : ''}}>
                <label>{{$value.title}}</label>
                <button class="destroy" data-id="{{$value._id}}"></button>
            </div>
            <input class="edit">
        </li>
        {{/each}}

服务器端代码

// 修改任务
todoRouter.post('/modifyTask', async (req, res) => {
	// 执行修改操作
	const task = await Task.findOneAndUpdate({_id: req.body._id}, _.pick(req.body, ['title', 'completed']),{new: true})
	// 响应
	res.send(task);
});

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值