首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails解析jQuery数据表的JSON响应

Rails解析jQuery数据表的JSON响应
EN

Stack Overflow用户
提问于 2019-12-04 22:32:42
回答 1查看 537关注 0票数 0

对于jQuery DataTables的ajax函数和JSON响应,我在我的Rails 6应用程序中遇到了一个小问题。我成功地访问了路由并返回了JSON响应。

我想要实现的是:我每天统计具有特定属性的记录的数量,这样我就可以得到一个整数值。我的问题是:如何将此值传递给jQuery DataTables以显示在列中?

我的控制器操作:

代码语言:javascript
复制
 def showDailyOrders
    render json: 
    { count1: OrderCard.where(day: Date.today).where(dish_type: 0).count }
  end 

初始化DataTable和AJAX请求的jQuery代码:

代码语言:javascript
复制
$("#todaysOrdersTable").DataTable({
            ajax: '/showDailyOrders',
            dataSrc: '',
            columns: [
                { title: 'Vollkost', data: 'count1' }
            ]
        });

我得到的JSON响应如下所示:

代码语言:javascript
复制
"{\"count1\":1}"

如何将值(在本例中为1)传递给jQuery函数?它只是告诉我“正在加载”,但什么也没发生。如果我使用另一个查询(如OrderCard.all )作为响应,并在函数中使用键(例如"id")作为数据,它将显示值。

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-04 23:41:07

dataSrc选项不存在,因此将被否定。请改用ajax.dataSrc选项:

代码语言:javascript
复制
$("#todaysOrdersTable").DataTable({
  ajax: {
    url: '/showDailyOrders',
    dataSrc: ''
  },
  columns: [
    { title: 'Vollkost', data: 'count1' }
  ]
});

修复dataSrc选项后,仍然存在返回值是单个值而不是数组的问题。当您返回OrderCard.all时,您将返回一个值数组,这就是它工作的原因。

这意味着我们必须将返回的单个对象{"count1":1}转换为包含对象[{"count1":1}]的数组。这可以在客户端完成,也可以在服务器端完成。在客户端,它应该看起来像这样:

代码语言:javascript
复制
$("#todaysOrdersTable").DataTable({
  ajax: {
    url: '/showDailyOrders',
    dataSrc: obj => [obj], // transform into an array
  },
  columns: [
    { title: 'Vollkost', data: 'count1' }
  ]
});

或者,如果您更愿意更改服务器端,它应该如下所示:

代码语言:javascript
复制
order_cards = OrderCard.where(day: Date.today).where(dish_type: 0)
# note that the object is now wrapped inside an array
render json: [{ count1: order_cards.count }]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59178386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档