【问题标题】:Pass lists of JSON objects as JSON object in knockout在淘汰赛中将 JSON 对象列表作为 JSON 对象传递
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 太完美了!我知道这看起来没有太大的区别,但清除这些加号是一个很大的帮助。谢谢
    猜你喜欢
    • 2012-04-05
    • 2013-09-22
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 2016-08-24
    • 2014-01-30
    • 1970-01-01
    相关资源
    最近更新 更多