2016-01-21 134 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