将JSON对象列表作为敲除中的JSON对象传递
在客户端,我有一系列敲除绑定的复选框,我需要通过AJAX将这些复选框传递给服务器,服务器需要JSON格式的请求。前端的复选框如下所示:将JSON对象列表作为敲除中的JSON对象传递,json,knockout.js,Json,Knockout.js,在客户端,我有一系列敲除绑定的复选框,我需要通过AJAX将这些复选框传递给服务器,服务器需要JSON格式的请求。前端的复选框如下所示: <div data-bind="foreach: Items"> <input type="checkbox" data-bind="checkedValue: $data, checked: $root.returnedItems, attr: { value: itemNumber}" /> </div>
<div data-bind="foreach: Items">
<input type="checkbox" data-bind="checkedValue: $data, checked: $root.returnedItems, attr: { value: itemNumber}" />
</div>
ko.toJSON(self.returnedItems())
用于将对象列表转换为要传递的JSON字符串。然而,它给我的结果是:
[{“项目”:“12088”,“描述”:“收音机”,“数量”:1},{“项目”:“1T1S”,“描述”:TV”,数量:1}]
这本身不是正确的JSON格式(这在Hindshight中是有意义的),因为它没有与数组外括号关联的键,它需要如下所示:
{itemList:[{“item”:“12088”,“desc”:“收音机”,“数量”:1},{“item”:“1T1S”,“desc”:TV”,数量:1}]}
但就我的一生而言,我无法找到一种在不改变AJAX调用的情况下实现这一点的好方法:
data:“{itemList:”+ko.toJSON(self.returnedItems())+“}”
这很管用,但看起来很粗糙。有没有一种更简单的方法可以在Knockout中传递格式良好的JSON对象列表?数组是有效的JSON,它不是JSON对象。如果您的ajax需要一个JSON对象,您应该能够像这样包装它:
ko.toJSON({itemList:self.returnedItems()})
,这太完美了!我知道这看起来没有多大区别,但清除这些加号是一个很大的帮助。谢谢
self.returnedItems = ko.observableArray()
self.showArray = function () {
$.ajax({
type: 'POST',
url: url,
data: ko.toJSON(self.returnedItems()),
dataType: 'json',
});
}