【发布时间】:2016-08-01 16:30:20
【问题描述】:
我的代码采用表单字段并将它们转换为适合传递给 REST API(特别是马拉松 REST API)的 JSON 字符串。问题是 JSON.stringify 双引号所有表单字段值,即使是数字,这会导致 ajax 调用失败。这是我的代码生成的字符串:
{"id":"basic-1","cpus":"0","mem":"32","instances":"1","cmd":"while [ true ] ; do echo 'Hello Marathon' ; sleep 5 ; done"}
mem、cpus 和 instances 值不应被双引号,因为它们是数字。
data: JSON.stringify($('form').MytoJson());
MytoJson 是一个序列化表单字段的函数。这工作正常。问题是 JSON.stringify 将引号放在键和所有值周围,包括数值,这导致 ajax 调用失败。
JSON.stringify 函数有两个参数。第一个参数是替换函数,可以是函数或数组。考虑这个替换函数:
function replacer(key, value) {
if (typeof value === "string") {
return undefined;
}
return value;
}
JSON.stringify($('form').MytoJson(), replacer);
我想将此替换函数修改为不引用数值。我想知道我是否使用 HTML5 表单属性来区分字符串和数字表单字段?考虑这个表单域:
<input id="cpus" type="number" name="cpus" value="0.1" />
如何在替换函数中使用该字段具有 type="number" 属性这一事实?当表单字段为数字类型时,我想修改替换函数以不引用值。
【问题讨论】:
-
这不应该导致 ajax 调用失败 - 我猜你正在使用 POST 或 PUT - 这仍然应该将数据发送到你的服务 - 你需要做的是在你的服务然后将这些字符串值转换为数字,然后再传递给您的数据库。在将数字发布到 restful 服务之前对数字进行字符串化是标准程序。
标签: javascript marathon