【发布时间】:2016-04-28 06:58:42
【问题描述】:
我在客户端有一系列剔除绑定复选框,我需要通过 AJAX 将这些复选框传递给需要 JSON 格式的请求的服务器。前端的复选框如下所示:
<div data-bind="foreach: Items">
<input type="checkbox" data-bind="checkedValue: $data, checked: $root.returnedItems, attr: { value: itemNumber}" />
</div>
通过将checkedValue设为$data,它将Item对象存储在数组中。
处理 AJAX 调用的 js大致是这样的(更改了一些,因为公司内部的帮助函数使其不同):
self.returnedItems = ko.observableArray()
self.showArray = function () {
$.ajax({
type: 'POST',
url: url,
data: ko.toJSON(self.returnedItems()),
dataType: 'json',
});
}
ko.toJSON(self.returnedItems()) 用于将对象列表转换为要传递的 JSON 字符串。但是,它给我的结果是这样的:
[{"item":"12088","desc":"电台","qty":1},{"item":"1T1S","desc":TV",qty":1}]
这本身不是正确的 JSON 格式(事后看来这很有意义),因为它没有与数组外括号关联的键,它需要看起来像这样:
{itemList: [{"item":"12088","desc":"Radio","qty":1},{"item":"1T1S","desc":TV",qty": 1}]}
但是我一辈子都找不到一个好方法来完成这个而不改变 AJAX 调用来发送这个:
data: "{itemList:" + ko.toJSON(self.returnedItems()) + "}"
这很有效,但看起来很老套。有没有更简单的方法在 Knockout 中传递格式良好的 JSON 对象列表?
【问题讨论】:
标签: json knockout.js