2016-01-21 82 views
2

我在客户端有一系列敲除绑定的复选框,我需要通过AJAX传递给需要请求的JSON格式的服务器。前端的复选框如下所示:将JSON对象的列表作为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”:“Radio”,“qty”:1},{“item”:“1T1S”, “desc”:TV“,数量”:1}]

这本身并不是正确的JSON格式需要看起来像这样:

{itemList中:[{ “项目”: “12088”, “说明”: “收音机”, “数量”:1},{ “项目”: “1T1S” ,“desc”:TV“,数量”:1}]}

但我不能为我的生活找到一个很好的方式太做到这一点不改变AJAX调用发送此:

data: "{itemList:" + ko.toJSON(self.returnedItems()) + "}"

其中一期工程,但似乎哈克。是否有一种更简单的方法来在Knockout中传递格式良好的JSON对象列表?

回答

4

数组是有效的JSON,它只是不是JSON 对象。如果你的ajax需要一个JSON对象,你应该可以像这样包装它:ko.toJSON({itemList: self.returnedItems()})

+0

这很完美!我知道这看起来没有什么区别,但清理这些加号是很有帮助的。谢谢 – DasBeasto