Javascript js:处理从字段生成动态json

Javascript js:处理从字段生成动态json,javascript,jquery,Javascript,Jquery,我想要一个带有动态键和值的动态生成的JSON,但不知怎么走错了方向。中的每个字段都有一个数据键属性集,因此解析器知道键名: <input type="text" class="form-control" id="..." data-key="name" value="chicken"> <input type="text" class="form-c

我想要一个带有动态键和值的动态生成的JSON,但不知怎么走错了方向。
中的每个字段都有一个
数据键
属性集,因此解析器知道键名:

<input type="text" class="form-control" id="..." data-key="name" value="chicken">
<input type="text" class="form-control" id="..." data-key="price" value="4.10">
我尝试通过以下方式生成一个新的:

let form = document.querySelector('#productForm');
let number = document.querySelector('#productLabel').getAttribute("prodid");
keys = Object.keys(products[0].data); // ["name", "price"]
let d = {}
    
    keys.forEach(function ( key ) {
        for ( let fe = 0; fe < form.elements.length; fe++ ) {
            if ( form.elements[fe].getAttribute("data-key") === key ) {
                d[key] = form.elements[fe].value;
            };
        };
    });
    let return_json = {"number": number, "data": d};

没错,您正在使用jQuery的表单数据序列化,它正是这样做的(与PHP的默认值兼容)

您需要自己将数据字符串化为JSON,并设置正确的内容类型标题:

$.ajax({
  url: "api/products/",
  type: "PUT",
  data: JSON.stringify(return_json),
  headers: { "X-CSRFTOKEN": csrf_token, "Content-type": "application/json" },
  // ...
});

你确定你的开发工具没有骗你吗?如果您执行
console.log(JSON.stringify(return_JSON))?此输出<代码>{“数字”:“4957”,“数据”:{“名称”:“鸡肉”,“价格”:“4”}
。为什么在devtools/network/request中会出现这种情况?您是如何发出请求的?您是否尝试在ajax调用中将数据类型显式设置为JSON?是的,结果相同。
$.ajax({ url: "api/products/",
         type: "PUT",
         data: return_json,
         headers: { 'X-CSRFTOKEN': csrf_token },
         success: function () { ... },
         error: function ( request, status, error ) { ... }
});
$.ajax({
  url: "api/products/",
  type: "PUT",
  data: JSON.stringify(return_json),
  headers: { "X-CSRFTOKEN": csrf_token, "Content-type": "application/json" },
  // ...
});