CNode

前端有两个带POST功能按钮,express框架路由如何做出不同响应

问答
Bbykege发布于10 年前最后回复10 年前16 回复7374 浏览0 收藏

在前端有两个submit按钮,都会向后台请求POST,如下 保存 修改 重置

请问如何在路由的post方法中判断是哪个按钮传过来的事件然后做出不同的数据库操作呢?

查看回复

回复 (16)

I
iyuq#1·10 年前

同一个form的submit事件应该是没法区分的,要想区分,只能用ajax的办法,点击提交时阻止默认的submit事件,然后在post的data中加个字段来区分,不知道是否能帮助你解决这个问题。

X
XGHeaven#2·10 年前

如果使用 jQuery 的话,可以使用 submit 事件,如果我没有记错的话。 可以在上传之前处理表单。加入一些验证信息。

当然如果只是想实现区分保存和修改的功能的话,建议还是在渲染页面的时候渲染一个隐藏域,加入必要的东西。

X
XGHeaven#5·10 年前
引用 bykege@XGHeaven 我的主要关注点在前端按钮点击后,后台的POST方法如何区分是哪个按钮POST的。 还是感谢你

@bykege 如果你是写后台的,不想改变前端代码的话,就只能去数据库里查询,如果有这条数据,那么就是修改,否则就是添加。

I
iyuq#6·10 年前

当然你也可以jquery的方法来提交form表单,在form里面加个hidden field,点击不同按钮时将这个hidden field设置成不同的值,在提交表单。

B
bykege#9·10 年前

已经有两个解决想法了 1.用ajax请求不同url,后台判断URL再做不同操作 $.ajax({ url:'login', type:'POST', data:data, }); app.post('/login',function(req,res)

2.加一个hid input 点击不同按钮用JS设置不同的值,后台判断其值做不同处理 router.post('/',function(req,res){ var hid = req.body['hid']; console.log(hid); var test = req.body['reset']; // console.log(test); if(hid=="reg"){ res.redirect('/reg'); } else{ res.redirect('/login'); } })

第二种比较蠢,但是可行,第一种还没有测试,但应该也可以

E
eyblog#10·10 年前
<input name="submit" type="submit" value="提交" />
<input name="submit" type="submit" value="修改" />

这样不就可以了吗?

B
bykege#11·10 年前
引用 eyblog这样不就可以了吗?

@eyblog 这在后台怎么判断呢?

K
klesh#13·10 年前

10楼正解 通过 name 啊,如果是 post 就是 req.body.submit === '提交'

B
bykege#14·10 年前

感谢各位,最后还是用ajax设置post不同地址方法解决了

G
gjc9620#15·10 年前

举个例子 对表user操作 修改应该是 app.put("/user/:id") 然后修改的数据放在body里 那增加应该是 app.post("/user") 然后增加的数据放在body里

前台两个按钮应该注册不同监听函数 请求上面的两个 URL即可

如果仅仅根据 前端给的标示 来判断是增加还是修改 后台代码就会有if else以后不好维护(我看了不舒服= =)

G
gjc9620#16·10 年前
引用 bykege@gjc9620 在监听函数中用ajax请求后台吗?

@bykege 两个不一样的按钮不一样的监听 不一样的"动作(put post)" 不一样的请求地址分别请求后台

参与回复
登录后即可参与回复。登录