【问题标题】:JQueryUI DataTable collection binding issueJQueryUI DataTable 集合绑定问题
【发布时间】:2016-04-07 16:11:06
【问题描述】:

我试图弄清楚如何将来自 AJAX 调用的集合绑定到 DataTable,但遗憾的是每次我收到错误消息说 JSON 无效(但它不是!)

我有一个名为“response”的返回对象,它有一个名为“Recipients”的集合,它有一个“Recipient”类型的对象并有一些道具:

名字 姓 电子邮件地址

即:response.Recipients 在客户端调用中转换为 data.Recipients(见下文)

我不确定如何绑定 - 有什么想法吗?

这是我当前的代码:

$.ajax({
                contentType: 'application/json',
                url: '@Url.Action("GetRecipients")',
                type: 'POST',
                dataType: 'json',
                data: jsonPayload,
                cache: false,
                success: function (data) {
                    if (data.Success) {
                        $('#tblRecipients').DataTable({
                            "data": data.Recipients,
                            "columns": [{
                                "Firstname": "Firstname",
                                "Lastname": "Lastname",
                                "EmailAddress": "EmailAddress"
                            }]
                        });
                    }
                    else {
                        alert(data.FailureInformation);
                    }
                },
                error: function (xhr, status, error) {
                    alert('There was a problem obtaining the selected recipient details. Please try again later');
                }
            });

肯定不会这么难吧?

是的,数据是正确的。我可以在 Recipients 对象中看到从调用中返回的 3 个项目。

感谢您的指点!

编辑 - 示例 json:

[{
  "Firstname": "Tim",
  "Lastname": "Hughes",
  "EmailAddress": "th@test.com"
}, {
  "Firstname": "Joe",
  "Lastname": "Bloggs",
  "EmailAddress": "jb@test.com"
}]

【问题讨论】:

  • 你能发布一个示例 JSON 吗?我认为发布它会让人们更容易找出这里的问题
  • 当然 - 刚刚发布!
  • 根据我在下面的回答,尝试使用带引号和不带引号的属性名称。在处理这两种情况时,我觉得 JavaScript 及其无穷无尽的库非常不一致。

标签: jquery jquery-ui datatables


【解决方案1】:

好的。没有人想通。我相信 OP 想要一个答案。如果您在

中使用"",问题显然不是
"columns": [{
   "Firstname": "Firstname",
   "Lastname": "Lastname",
   "EmailAddress": "EmailAddress"
}]

但是你应该在columns 中定义data 正确

columns: [
    {  data: "Firstname" },
    {  data: "Lastname" },
    {  data: "EmailAddress" }
 ]

查看演示 -> http://jsfiddle.net/0f9Ljfjr/796/

【讨论】:

  • 哇。这几乎奏效了!谢谢大卫 :) - 似乎发生的事情是它只填充表格中的电子邮件地址?我确实看到名字,姓氏数据回来了....
  • @Ahmedilyas,​​请参阅编辑 - 忘记逐项列出列。现在它可以工作了。
  • 谢谢。这绝对有效!非常感谢。
【解决方案2】:

您应该使用 aoColumns 而不是列

让我们考虑下面的例子

 var test = [ {"Firstname":"Tim","Lastname":"Hughes","EmailAddress":"th@test.com"},{"Firstname":"Joe","Lastname":"Bloggs","EmailAddress":"jb@test.com"} ];
                    $('#tblRecipients').DataTable({
                        "aaData": test,
                        "aoColumns": [
    { "mDataProp": "Firstname" },
    { "mDataProp": "Lastname" },
    { "mDataProp": "EmailAddress" }
]
                    });

我还创建了 JS fiddle 请查看https://jsfiddle.net/bj3r2bnf/3/

【讨论】:

  • 这也可以通过将"aaData"替换为data"aoColumns"替换为columns来工作。
【解决方案3】:

改变这个

$('#tblRecipients').DataTable({
                        "data": data.Recipients,
                        "columns": [{
                            "Firstname": "Firstname",
                            "Lastname": "Lastname",
                            "EmailAddress": "EmailAddress"
                        }]
                    });

到这里:

$('#tblRecipients').DataTable({
                        data: data.Recipients,
                        columns: [{
                            "Firstname": "Firstname",
                            "Lastname": "Lastname",
                            "EmailAddress": "EmailAddress"
                        }]
                    });

我不知道为什么,但使用 datacolumns 代替字符串属性名称也适用于 @mauliksakhare 的 jsFiddle。

【讨论】:

  • 到底有什么区别?
  • @davidkonrad 打败了我,但它确实有效。我每次打电话DataTable()时都使用这个约定。
  • 没有区别。如果xxx: 有效,"xxx": 也有效,反之亦然。为什么它应该在嵌套对象文字中起作用,而不是在父对象中?
猜你喜欢
  • 2018-03-19
  • 1970-01-01
  • 2023-03-15
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多