DataTables错误:“请求的未知参数”

我是DataTables jQuery插件的新手。在发现IE

8的Javascript性能问题后,我决定更改使用DataTables进行服务器端处理的方式。当我的JSP加载时(我正在使用Spring

3),我收到此错误消息:

DataTables warning (table id = 'results_table'): Requested unknown parameter '0' from the data source for row 0

我在Google周围搜索,发现导致该错误消息的许多原因都归结为格式错误的JSON,因此我找到了一种从Spring

3控制器函数输出JSON的方法,以查看其生成的JSON,并更改了代码以将其转换为非常接近DataTables网站所说的外观。

仍然没有喜悦,仍然收到该错误消息。

我为DataTables找到的服务器端处理示例不包含用于指定客户端使用的列的代码,因此我假设我不需要它。可以吗

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head>

<title>ACME: search results in a nice DataTables.net Plugin</title>

</head>

<body>

<link rel="stylesheet" type="text/css" href="css/jquery.dataTables.css" />

<script language = "JavaScript" type = "text/javascript" src = "../nsd/js/jquery-1.7.js"></script>

<script language = "JavaScript" type = "text/javascript" src = "../nsd/js/jquery.dataTables.js"></script>

<script type="text/javascript">

$(document).ready(function() {

$('#results_table').dataTable( {

"bProcessing": true,

"bServerSide": true,

"sScrollX": "600px",

"sServerMethod": "POST",

"sAjaxSource": "/acme/resultstable",

} );

} );

</script>

<form id="command" name="f" action="employee" method="post">

<div id = "results">

<table id = "results_table">

<thead>

<tr>

<th>&nbsp;</th>

<th>ID</th>

<th>NO_PRINT</th>

<th>Full Name</th>

<th>Email Address</th>

<th>Phone Number</th>

<th>Organization</th>

<th>Organization Code</th>

<th>Position</th>

<th>Employee Type</th>

</tr>

</thead>

<tbody>

</tbody>

</table>

</body>

</html>

{

"sEcho" : 1,

"iTotalRecords" : 1,

"iTotalDisplayRecords" : 1,

"aaData" : [ {

"person_id" : "888888",

"ID" : "999999",

"no_print" : "&nbsp;",

"fullname" : "Obama, Willard",

"email_address" : "<a href = \"mailto:barry@whitehouse.gov\">barry@whitehouse.gov</a>",

"current_phone_number" : "303-867-5309",

"title" : "&nbsp;",

"office" : "&nbsp;",

"position" : "Contractor",

"empl_code" : "CONT"

} ]

}

这是我用来通过Jackson发送JSON响应的Spring控制器函数。这包括用于输出JSON的代码,因此我可以看到它的外观。它输出到stdout的JSON和我发送回DataTables的JSON是否可能不同?

@RequestMapping(value = "/resultstable", method = RequestMethod.POST)

public @ResponseBody LinkedHashMap resultstable(ModelMap model,

HttpSession session,

@RequestParam (required=true) int sEcho,

@RequestParam (required=true) int iDisplayStart,

@RequestParam (required=true) int iDisplayLength,

@RequestParam (required=true) int iColumns,

@RequestParam (required=true) int iSortCol_0,

@RequestParam (required=false)String sSortDir_0,

@RequestParam (required=true) String sSearch ) {

/*

**********************************************************************

** These come from the DataTables.net Jquery plugin on results.jsp

**********************************************************************

** sEcho, - just send it back, used by DataTables for synching

** iDisplayStart - index of the record to start with, ie 3 for the 3rd of 100 records

** iDisplayLength - number of records to send back starting with iDisplayStart

** iColumns - number of columns to be displayed in the table

** iSortCol_0 - the number of thee column to be sorted on

** sSortDir_0 - direction of sorting: asc or desc

** sSearch - from the search box, filter results further on this term

**********************************************************************

*/

String nextView = "results";

String usertype = (String)session.getAttribute("usertype");

Search search = new Search(usertype);

List<LinkedHashMap> records = null;

String results = null;

int number_of_records = (Integer)session.getAttribute("number_of_records_found");

ResultsView rv = new ResultsView();

ResultsScreenTableHolder rstrh = null;

SearchScreenDataHolder ssdh2 = (SearchScreenDataHolder)session.getAttribute("search_screen_data_holder");

ObjectMapper mapper = new ObjectMapper();

logger.debug("started");

logger.debug("sEcho, == " + sEcho );

logger.debug("iDisplayStart == " + iDisplayStart );

logger.debug("iDisplayLength == " + iDisplayLength );

logger.debug("iColumns == " + iColumns );

logger.debug("iSortCol_0 == " + iSortCol_0 );

logger.debug("sSortDir_0 == " + sSortDir_0 );

logger.debug("sSearch == " + sSearch );

try {

records = search.searchForAnEmployee(ssdh2,usertype,sSearch,"asc",

iSortCol_0,iDisplayStart,

iDisplayLength);

LinkedHashMap lhm= new java.util.LinkedHashMap();

lhm.put("sEcho", sEcho);

lhm.put("iTotalRecords",number_of_records);

lhm.put("iTotalDisplayRecords",9);

lhm.put("aaData",records);

// convert user object to json string, and save to a file

mapper.writeValue(new File("c:\\Downloads\\rstrh.json.txt"), lhm);

// display to console

logger.debug("My JSON: " + mapper.defaultPrettyPrintingWriter().writeValueAsString(lhm));

}

catch (Exception e) {

logger.debug("\n",e);

}

return lhm;

}// end function

回答:

今天早上我遇到了同样的问题。您需要具有aoColumns参数并在其中使用mDataProp As:

https://gist.github.com/1660712

至少它解决了我的问题。

以上是 DataTables错误:“请求的未知参数” 的全部内容, 来源链接: utcz.com/qa/404842.html

回到顶部