带有NodeJS的jQuery数据表& MySQL的

时间:2018-06-06 23:47:09

标签: mysql node.js ajax datatables serverside-rendering

我想在Datatable中显示值。我打开了我的chrome dev工具并转到网络选项卡,XHR和问题是,响应是HTML文档

服务器端代码:

router.get('/agents', (req, res) => {
  let dB = req.dB;
  let sql = 'SELECT * FROM tbl_users WHERE role_id = 3';

  dB.query(sql, (err, agents) => {
    if (err) throw err;
    const data = { agents };
    console.log(data);

    res.render('dashboard/agents', data);
  });
});

客户端脚本:

$('#agent_table').DataTable( {
  processing: true,
  serverSide: true,
  ajax: {
    url: '/administrator/agents',
    type: 'GET',
    dataSrc: 'agents'
  },
  columns: [
    { data: 'user_id' },
    { data: 'checked' },
    { data: 'first_name' },
    { data: 'middle_name' },
    { data: 'role_id' },
  ]
} );

客户端htmlt:

<table id="agent_table" class="table table-striped table-bordered dt-responsive nowrap"
            cellspacing="0" width="100%">
            <thead>
              <tr>
                <th>User ID</th>
                <th>
                  <div class="checkbox checkbox-success select_all">
                    <input class="styled" type="checkbox" id="check_all">
                    <label for="check_all" class="check_all_label">All</label>
                  </div>
                </th>
                <th>First Name</th>
                <th>Middle Name</th>
                <th>Last Name</th>
                <th>Role</th>
              </tr>
            </thead>
          </table>

控制台登录服务器

  

{agents:[RowDataPacket {          user_id:6,          first_name:&#39; Pamela&#39;,          middle_name:&#39; Pearl&#39;,          last_name:&#39; Sabes&#39;,          电子邮件:&#39; test@gmail.com',          密码:&#39; 1bd07c9db7ae63c02f2ee75471727f58&#39;,          mobile_number:&#39; 09503713607&#39;,          invite_code:&#39;&#39;,          生日:&#39; 2005年11月29日&#39;,          性别:&#39;女性&#39;,          地址:&#39;&#39;,          图像:null,          contact_person:&#39;&#39;,          contact_person_number:&#39;&#39;,          role_id:3,          经度:&#39;&#39;,          纬度:&#39;&#39;,          medical_info:&#39;&#39;,          is_verified:1,          is_deleted:0,          created_at:&#39; 0000-00-00 00:00:00&#39;,          updated_at:2018-05-30T20:42:43.000Z}]}

2 个答案:

答案 0 :(得分:2)

我认为问题在于你对res.render的使用。因为根据快速文档,res.render()函数编译你的模板,在那里插入locals,并从这两件事创建html输出并发送它。所以试试吧。 res.json(data)

答案 1 :(得分:0)

var url = req.protocol +'://'+ req.get('host');

var draw = req.body.draw;
var row = req.body.start;
var count = 1+parseInt(row);
var rowperpage = req.body.length; // Rows display per page
//var columnIndex = req.query.order[0]['column']; // Column index
//console.log(req.body.search);
var dataArr = [];

adminTagModel.CountTagsAll(dataArr, function (totalRecordsValid)
{
    var tagDataobj = {
        row : row,
        rowperpage : rowperpage
    };
    adminTagModel.showTagsAll(tagDataobj, function (totalValid)
    {
        for (var i = 0; i < totalValid.length; i++) 
        {
            dataArr.push({  'count' : count++ ,'tag_name' : totalValid[i].tag_name,'action' : "<a href='"
                +url+"/admin/tagdetails/"+totalValid[i].t_id+"' target='_blank'  ><i class='fa fa-eye'  alt='View Detail'></i></a>"});
        }

        var response = {
            "draw" : draw,
            "iTotalRecords" : totalRecordsValid[0].allcount,
            "iTotalDisplayRecords" : totalRecordsValid[0].allcount,
            "aaData" : dataArr
        };
        res.send(response);
        return response;
    });