[我正在尝试创建基本的datatables.net和Coldfusion服务器端示例,但似乎不起作用

问题描述 投票:0回答:1

此示例基于此链接https://datatables.net/forums/discussion/40613/datatable-jquery-server-side-with-adobe-cold-fusion-and-sql-server我正在使用数据表版本1.10

在第一页加载时,所有数据均已成功加载到#formsTable中但是单击排序,搜索和分页时,它将无法正常工作。它只是挂在'processing ..'

pageA.cfm(仅在此处显示脚本部分...)

<script type="text/javascript"> 
   $(document).ready(function(){        
        $('#formsTable').DataTable({
        processing:true,
        serverSide:true,
        ajax:{
           url:'pageB.cfm'
        },  
        columns:[
                {title: "id",data:'id'},
                {title: "Name",data:'name'},
                {title: "Emp.No",data:'empno'},
                {title: "IC",data:'ic'}
            ]

        })
   })
</script>

pageB.cfm(服务器端)

<cfcontent reset="true">

<cfset listColumns = "id,emp_no,emp_name,number_id2" />

<cfset sIndexColumn = "id" />

<cfparam name="url.sEcho" default="1" type="integer" />

<cfparam name="url.iDisplayStart" default="0" type="integer" />

<cfparam name="url.iDisplayLength" default="10" type="integer" />

<cfparam name="url.sSearch" default="" type="string" />

<cfparam name="url.iSortingCols" default="0" type="integer" />

<!--- query data --->
<cfquery datasource="hrms" name="qFiltered">
    select id,emp_no,emp_name,number_id2 from employee
    <cfif len(trim(url.sSearch))>
        Where
        (
        <cfloop list="#listColumns#" index="thisColumn">
          <cfif thisColumn neq listFirst(listColumns)>
          OR
          </cfif>
          #thisColumn# LIKE <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="%#trim(url.sSearch)#%" />
        </cfloop>
        )
    </cfif>

    <cfif url.iSortingCols gt 0>
    ORDER BY
    <cfloop from="0" to="#url.iSortingCols-1#" index="thisS">
      <cfif thisS is not 0>, </cfif>
        #listGetAt(listColumns,(url["iSortCol_"&thisS]+1))#
      <cfif listFindNoCase("asc,desc",url["sSortDir_"&thisS]) gt 0>
        #url["sSortDir_"&thisS]#
      </cfif>
    </cfloop>
    </cfif>

</cfquery>

<!--- query data count --->
<cfquery dbtype="query" name="qCount">
    SELECT COUNT(#sIndexColumn#) as total
    FROM qFiltered
</cfquery>

<!--- Output --->
{"sEcho": <cfoutput>#val(url.sEcho)#</cfoutput>,
"iTotalRecords": <cfoutput>#qCount.total#</cfoutput>,
"iTotalDisplayRecords": <cfoutput>#qFiltered.recordCount#</cfoutput>,
"aaData": [
<cfoutput query="qFiltered" startrow="#val(url.iDisplayStart+1)#" maxrows="#val(url.iDisplayLength)#">

<cfif currentRow gt (url.iDisplayStart+1)>,</cfif>
{
"id":#SerializeJSON(qFiltered.currentrow)#,
"name":#SerializeJSON(qFiltered.emp_name)#,
"empno":#SerializeJSON(qFiltered.emp_no)#,
"ic":
<cfif trim(qFiltered.number_id2) neq '[empty string]'>
#SerializeJSON(qFiltered.number_id2)#
<cfelse>
""
</cfif>
}
</cfoutput> ] }

我被困在这里,似乎pageB.cfm上缺少某些内容?

coldfusion server-side
1个回答
0
投票

是的,很遗憾,您正在datatables.net上查看的代码示例适用于旧数据表。在数据表1.10.x下,您将必须使用版本1.10在返回的json结构中期望的升级密钥。看起来您已经用新参数更新了pageA.cfm,但是您还需要在pageB.cfm中更新服务器端返回参数。

这里是升级到1.10版https://datatables.net/upgrade/1.10的指南

这里是服务器端1.10 https://datatables.net/manual/server-side的新参数的指南>

您必须对pageB.cfm进行的代码修改是

  • sEcho更改为draw
  • iTotalRecords更改为recordsTotal
  • iTotalDisplayRecords更改为recordsFiltered
  • aaData更改为data
  • 通过使用带有“ row”选项的serializeJSON来简化data,因为数据表需要数据中的数组数组,在ColdFusion对其进行序列化后,可以在DATA键中找到它。
  • pageB.cfm(我仅从“输出”向下提取而未修改其上方的代码)。

<!--- Output --->
<cfoutput>
{
    "draw": #val(url.sEcho)#,
    "recordsTotal": #qCount.total#,
    "recordsFiltered": #qFiltered.recordCount#,
    "data": #serializeJson(qFiltered, "row").DATA# <!--- Use the "row" option as datatables expects an array of arrays as data. --->
}
</cfoutput>
© www.soinside.com 2019 - 2024. All rights reserved.