jquery datatables不显示任何数据 - json格式错误

时间:2014-02-27 11:46:55

标签: ajax spring-mvc datatable

我有简单的表格

<table class="datatable table table-striped table-bordered" id="usertable">
                <thead>
                    <th>Name</th>
                    <th>Surname</th>
                    <th>Username</th>
                </thead>
                <tbody>

                </tbody>
            </table>

这是我的javascript代码。我想向Spring控制器发送ajax请求并返回数据。

$(function() {
$('.datatable').dataTable({
    "sPaginationType": "bs_full",
    "sAjaxSource" : "loadusers.html",
    "aoColumns" : [
        {
            "sTitle" : "Name",
            "mData" : "name"
        },
        {
            "sTitle" : "Surname",
            "mData" : "surname"
        },
        {
            "sTitle" : "Username",
            "mData" : "username"
        }
     ]
});
$('.datatable').each(function(){
    var datatable = $(this);
    var search_input = datatable.closest('.dataTables_wrapper').find('div[id$=_filter] input');
    search_input.attr('placeholder', 'Search');
    search_input.addClass('form-control input-sm');
    var length_sel = datatable.closest('.dataTables_wrapper').find('div[id$=_length] select');
    length_sel.addClass('form-control input-sm');
});
});

在我的spring控制器中,我返回这样的数据

@RequestMapping("/loadusers.html")
@ResponseBody 
public String test(Model model) {        
    //get list of users
    //get list of logins for users
    logger.debug("TRY TO RETURN AJAX RESPONSE");

    return "{  \"name\" : \"name1\", \"surname\" : \"surname1\", \"username\" : \"username1\" }";
}

但它不起作用,我有解析错误。

有什么问题?

2 个答案:

答案 0 :(得分:0)

我改变了几件事,现在它运作得很好

的Javascript

$('.datatable').dataTable({
    "sPaginationType": "bs_full",
    "bProcessing" : true,
    "sAjaxSource" : "loadusers.html",
    "sAjaxDataProp" : "test"
});

控制器

@RequestMapping("/loadusers.html")
@ResponseBody 
public String test(Model model) {        
    logger.debug("TRY TO RETURN AJAX RESPONSE");

    return "{ \"test\": [ "
            + "[ \"name1\", \"surname1\", \"username1\"],"
            + "[ \"name2\", \"surname2\", \"username3\"],"
            + "[ \"name2\", \"surname2\", \"username3\"]"
            + "] }";
}

答案 1 :(得分:0)

您可能对Jackson mapper感兴趣,而不是返回一串json。通过设置

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="webBindingInitializer">
        <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"/>
    </property>
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
        </list>
    </property>
</bean>

然后您可以将直接转换为json的对象返回

@RequestMapping("/loadusers.html")
@ResponseBody 
public String test(Model model) {        
     // Compose your dataTable object
    return dataTable;
}

显然杰克逊应该进口。随着maven

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.9</version>
</dependency>