html 是这么个写法:
<form action="gamepage" method="post" >
Player name: <input type="text" name=player_id value="player1"><br>
Room name: <input type="text" name=room_id value="room1"><br>
Player amount: <input type="number" name=player_amount value=4><br>
<input type="submit" value="提交">
</form>
第三个 player_amount 那里我应该是设置了数字的
服务器用 nodejs 接收这个 post 请求用的 bodyParser
app.post('/gamepage',function(req,res){
console.log('gamepage request');
console.log(typeof(req.body.player_amount));});
然后 console.log 了一下结果是这样的: string { player_id: 'player1', room_id: 'room1', player_amount: '4' }
所以问题发生在我的表单提交的时候没有设置对格式还是我用错了中间件呢?初学服务器后台这些,对数据的格式也不是很熟悉,折腾了好久。 小弟先感谢各位老哥了。
1
meso5533 2020-05-21 07:32:18 +08:00
你看一下开发者工具里面的网络请求,看一下这个 POST 请求的 body 长什么样,你就知道上传的请参数根本没区分 string 还是 number
|
2
wangxiaoaer 2020-05-21 07:37:09 +08:00 via Android
HTTP 协议传数据的时候可不管你什么格式的,你需要后台自己解析,当然有些通用的比如文件,json 等类型你采用的 web 框架(servlet node 等)可能会帮你解析。
|
3
baiyi 2020-05-21 07:54:56 +08:00
post 的数据在 body 里,通过 HTTP 协议的 Content-Type 指定编码格式,如果你不设置 form 的 enctype 属性,默认是 application/x-www-form-urlencoded 编码。如果你想要精确类型的编码,一种常见的选择是使用 application/json 。
|
4
Waihinchan OP @meso5533 我之前直接用 xmlhttprequest 看过是正常的 但是我后来用表单来发送请求就变了 但是看这结论应该是我解析过程出现了问题 我再去试试 谢谢啦
|
5
Waihinchan OP @baiyi 我晓得~现在的情况是我后台的确能解析成我想要的 但是其中一个字段就变成了一个字符 按道理应该是数字来的 我之前试过直接发送一个对象解析是 OK 的 所以还是疑惑是不是我的表单出了问题
|
6
zachlhb 2020-05-21 08:03:03 +08:00 via Android
表单提交的所有数据都是 string,input 上的 type 为 number 只是用来限制输入框的输入类型,并不代表提交到后台就是 int 类型,你要 int 类型后台接收到要自己转换一下
|
7
Waihinchan OP @zachlhb 好的!明白了!那我去做个类型转换好了
|
8
Waihinchan OP emmm 所以现在补充说明情况是 我能解析成 json 但是有一个数字的字段变成了 string 根据 6 楼的老哥说的是表单发送都是 string 所以我得手动转换
或者说有没有别的方法呢…? |
9
crella 2020-05-21 08:19:15 +08:00 via Android
浏览器以 json 形式上传,服务器以 json 形式解析。
可以看看 json 的序列化和反序列化是怎么做的。 |