数据表错误:“请求的未知参数" [英] DataTables Error: "Requested unknown parameter"

查看:22
本文介绍了数据表错误:“请求的未知参数"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 DataTables jquery 插件的新手.在发现 IE 8 的 Javascript 存在性能问题后,我决定改变使用 DataTables 进行服务器端处理的方式.我在加载 JSP 时收到此错误消息(我使用的是 Spring 3):

I'm new to the DataTables jquery plugin. After discovering that IE 8 had performance issues with Javascript I decided to change the way I use DataTables to do server side processing. I'm getting this error message when my JSP loads ( I'm using Spring 3 ):

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

我在谷歌上搜索,发现该错误消息的许多原因归结为格式错误的 JSON,所以我找到了一种从 Spring 3 控制器函数输出我的 JSON 的方法,以查看它生成的 JSON,我将代码更改为让它非常接近 DataTables 网站所说的应该是什么样子.

I Googled around and found that many causes of that error message come down to malformed JSON so I found a way to output my JSON from my Spring 3 controller function to take a look at the JSON it makes and I changed my code to get it to be pretty close to what the DataTables site says it should look like.

仍然不高兴,仍然收到错误消息.

Still no joy, still getting that error message.

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

The server side processing examples I found for DataTables didn't include code for specifying the columns used on the client side, so I assumed I don't need it. Do I?

以下是我的 results.jsp 的相关部分:

<!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>

这是我发送给它的 JSON 响应:

{
  "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 的内容可能不同吗?

Here is my Spring controller function I am using to send the JSON response via Jackson. This includes code to output my JSON so I can see what it looks like. Could the JSON it outputs to stdout and what I am sending back to DataTables be different?

@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("
",e);
    }

    return lhm;       

}// end function 

推荐答案

今天早上我遇到了同样的问题.您需要有 aoColumns 参数并使用 mDataProp 如下:

I was having this same problem this morning. You need to have the aoColumns parameter and use mDataProp As in this:

https://gist.github.com/1660712

至少它解决了我的问题.

At least it solved my problem.

这篇关于数据表错误:“请求的未知参数"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆