我在客户端有一系列的淘汰限制复选框,我需要通过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字符串。但是,它给我的结果是:
[{ “项”: “12088”, “降序”: “无线电”, “数量”:1},{ “项”: “1T1S”, “降序”:TV “数量”:1}]
这本身不是正确的JSON格式(在hindsighht中有意义),因为它没有与数组外括号相关联的键,它需要看起来像这样:
{itemList:[{“item”:“12088”,“desc”:“Radio”,“qty”:1},{“item”:“1T1S”,“desc”:TV“,qty”: 1}]}
但我不能为我的生活找到一个好的方法来完成这个而不改变AJAX调用发送这个:
data: "{itemList:" + ko.toJSON(self.returnedItems()) + "}"
哪个有效,但看起来很hacky。是否有更简单的方法在Knockout中传递格式良好的JSON对象列表?
答案 0 :(得分:4)
数组是有效的JSON,它不是JSON 对象。如果你的ajax需要一个JSON对象,你应该能够像这样包装它:ko.toJSON({itemList: self.returnedItems()})