AJAX提交前动态构建请求数据对象,仅保留最后一项问题求助
问题解决:动态构建AJAX请求的Rows对象
你的问题出在循环里的这行代码:
payload.UpdateID.Rows = { [id]: value };
每次循环都会完全替换Rows对象,把它变成只包含当前元素键值对的新对象,之前添加的内容自然就被覆盖了,最终只会保留最后一个元素的数据。
要解决这个问题,你需要给已有的Rows对象新增属性,而不是替换整个对象,把上述代码改成:
payload.UpdateID.Rows[id] = value;
修正后的完整代码如下:
let payload = { UpdateID: { Table: `newton_manual_loads`, Code: `nml`, Rows: {}, Where: `nml_id = ` + LoadID } }; let Changed = $(`[data-changed='true']`); Changed.each(function (ix, element) { let id = $(element).attr(`id`); let value = $(element).val(); payload.UpdateID.Rows[id] = value; // 修改这一行 console.log(id + `:` + value); }); console.log(payload); payload = JSON.stringify(payload); $.ajax(`/libraries/ajax/Update.ajax.php`, { type: `POST`, data: { payload: payload }, success: function (data) { /*rest of code*/ } });
这样循环时就会把每个符合条件的元素的键值对都添加到Rows对象里,最终就能得到你期望的包含多个键值对的结构。
内容的提问来源于stack exchange,提问作者Madeline Kallis
相关产品推荐
相关产品推荐

