【发布时间】:2014-07-14 01:17:02
【问题描述】:
所以我有一个带有输入字段的 html5 表单。假设这些字段是名字、姓氏、电话、电子邮件和地址。
现在,名字、姓氏和地址是必需的,而电话和电子邮件是可选的。我知道后端已正确配置。但是在 html5 表单上,它不会让我在没有电话或电子邮件的情况下提交,否则它会返回 400 错误。
如果我从 html5 表单中删除可选项,它会让我提交它,或者我可以输入一个 value=" " 并提交。我什至可以使用 :required 和 :optional 用 CSS3 标记字段,它会正确显示,但仍然不允许我提交。
现在我显然不能只从 html 中删除可选项,因为有些用户可能需要这些字段,但我也不想为不需要的用户发送默认值“”或“n/a”需要他们。我只是在这里做错了什么还是什么?我不明白发生了什么。
编辑 2:这是一个使用 Hapi.js 和 Joi 验证、请求和 couchdb 的 node.js api。
编辑:我知道 400 是一个服务器错误,但是如果我发布一个 curl 省略了可选的,它会正常运行。当我从 html 中删除可选的选项时,它也很顺利,这就是为什么它没有意义。这是 api 的验证码服务器端。
handler: function(req, res) {
request({
method: 'POST',
uri: 'https://127.0.0.1:6984/banned',
jar: cookieJar,
strictSSL: false,
json: {
firstn: req.payload.firstn,
lastn: req.payload.lastn,
licno: req.payload.licno,
phone: req.payload.phone,
email: req.payload.email,
address: req.payload.address,
description: req.payload.description
}
},
function(err, resp, body) {
if (err) { res(err) };
if (resp.statusCode === 401) {
res(resp.statusCode + ' Please log in.');
}
else if (resp.statusCode === 201) {
res(body);
}
});
},
validate: {
payload: {
firstn: Joi.string().required(),
lastn: Joi.string().required(),
licno: Joi.string().optional(),
phone: Joi.string().optional(),
email: Joi.string().optional(),
address: Joi.string().optional(),
description: Joi.string().required()
}
}
【问题讨论】:
-
服务器端出现 400 错误。向我们展示服务器代码。
-
400 用于 HTML5 验证!!!
-
您使用的是 Javascript 框架还是某种库?如果是这样,请在您的问题中添加标签或解释。