使用Spring MVC Controller调用Ajax

时间:2016-08-31 22:50:54

标签: jquery ajax spring spring-mvc

我试图向我的控制器发送一个AJAX调用,其代码显示如下。现在我面临的问题是,即使我能够在控制器中检索数据并随后处理它,它也不会通过AJAX调用返回到jsp页面。

@SuppressWarnings("unchecked")
@RequestMapping(value="/movie", method=RequestMethod.GET)
public @ResponseBody Person search(HttpServletRequest request, HttpServletResponse response) throws IOException{        
    String name = request.getParameter("uname1");
    System.out.println(name);
    List<Person> movie = personDAO.search(name);
    Person per = new Person();
    for (java.util.Iterator<Person> iterator = movie.iterator(); iterator.hasNext();){
        per = iterator.next(); 
    }

    System.out.print(per + " Wtf");
    return per;
}

这是我的AJAX电话:

     $.ajax({
        url: 'movie.html',
        dataType: "json",
        type: "GET",
        contentType: 'application/json',
        mimeType: 'application/json',
        data: 'uname1=' + $('#element0').val(),
        success: function(data){
               $('#col1').text(data.name);
               $('#col2').text(data.pname);
               $('#col3').text(data.wname);
               $('#col4').text(data.lname);
        },
        error: function(xhr, status, error) {
               $('#col1').text("Undefined");
               $('#col2').text("Undefined");
               $('#col3').text("Undefined");
               $('#col4').text("Undefined");
        }
    });

下面是输出的屏幕截图: Eclipse Output

2 个答案:

答案 0 :(得分:1)

而不是返回一个Object。您应该返回一个带有','分隔符的字符串并将其拆分以在视图中获得所需的输出。

根据mozilla documentation,ResponseText可以是字符串或xml。您传递的对象可能是一个问题。

这是一个link来获取逗号分隔的String并在视图中使用它

答案 1 :(得分:1)

所以,问题在于我的网址映射。在我的问题编辑之前,我的代码有一些注释部分,它们解析Person对象并将其元素插入到JSON对象中。问题是我用于我的AJAX调用的URL有一个.html扩展名,而Spring实际上使用URL中的扩展名来决定返回什么类型的内容,如下所述:

@ResponseBody not working with spring 4.2.4 - not a duplicate I have checked all others

所以通过修改我的web.xml中的URL模式,如下所示:

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.html</url-pattern>
    <url-pattern>*.json</url-pattern>
</servlet-mapping>

随后将我的AJAX调用中的网址更改为电影。 JSON

     $.ajax({
        url: 'movie.json',
        dataType: "json",
        type: "GET",
        contentType: 'application/json',
        mimeType: 'application/json',
        data: 'uname1=' + $('#element0').val(),
        success: function(data){
               $('#col1').text(data.name);
               $('#col2').text(data.pname);
               $('#col3').text(data.wname);
               $('#col4').text(data.lname);
        },
        error: function() {
               $('#col1').text("Undefined");
               $('#col2').text("Undefined");
               $('#col3').text("Undefined");
               $('#col4').text("Undefined");
        }
    });

我能够达到预期的效果。