spring mvc 3 + jquery + AJAX + $ .get - 值没有从控制器返回到回调方法

时间:2012-10-30 19:10:03

标签: javascript ajax spring jquery spring-mvc

我是AJAX的新手,目前正在学习使用Spring MVC。我也面临同样的问题。

在继续我正在进行的实际实时要求之前,我正在测试整个AJAX + Spring MVC + jquery组合,其中包含一些非常基本的东西,以便我理解正确。

我在页面上有一个搜索框+“提交”按钮。我正在使用$ .get向Spring控制器发送硬编码文本。然后我将该控制器中的另一个文本发送回回调函数,并尝试使用“警告”框在回调函数中显示返回的文本。这似乎不起作用。

我看到正在调用回调函数(因为回调函数中的'alert'被触发)所以我有点假设控件正被转移到控制器并返回到回调方法但我是无法弄清楚为什么从控制器返回的文本没有显示在回调方法的警告框中。不知道我在这里缺少什么来捕获回调方法中的返回值。

非常感谢您对此的回应和帮助。

感谢。

HTML文本框和提交按钮:

    <div class = "searchcontactform">
      <form id = "searchcontactform" name="searchcontactform" method="GET">
        <input type = 'text' size='25' name = "searchlastname" id = "searchlastname" value='Enter Last Name to Search'/>
        <input type = "submit" value="Find">
      </form>
   </div>

在提交上述表单时触发的JavaScript:

    <script type="text/javascript" src="${pageContext.request.contextPath}/resources/scripts/jquery.min.js"></script>
    <script type="text/javascript">

    $(document).ready(function( ) {
    $('#searchcontactform').submit(function(){

         $.get("ContactList-JPA/search", {textsent : 'Hello Controller'},callback);

         function callback(textreceived){
               alert('In Callback. Text Received is: '+textreceived);
         };
    });
    });

控制器:

        @RequestMapping(value = "/search", method = RequestMethod.GET)
        public @ResponseBody String searchcontact(@RequestParam(value="textsent") String textsent){
        return textsent;
        }

杰克逊在POM.xml中的依赖:

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

在servlet-context.xml和root-context.xml中驱动的注释:

    <!-- Enables the Spring MVC @Controller programming model -->
    <annotation-driven />

3 个答案:

答案 0 :(得分:3)

首先,将return false放在提交事件处理程序

的末尾
$('#searchcontactform').submit(function(){

         $.get("ContactList-JPA/search", 
         {
             textsent : 'Hello Controller'
         },
         function(textreceived){
               alert('In Callback. Text Received is: '+textreceived);
         });
         return false;
    });

如果这不起作用尝试使用谷歌浏览器,您可以调试您的JavaScript应用程序,在回调和$.get行中放置一个断点

答案 1 :(得分:1)

我认为问题是你正在返回类型字符串,并且出于某些原因Spring / Jackson在转换为响应时不喜欢。要解决此问题,您应该执行以下操作:

@RequestMapping(value = "/search", method = RequestMethod.GET)
public @ResponseBody List<String> searchcontact(@RequestParam(value="textsent") String textsent){
    return Arrays.asList( new String[] { textsent } );
}

这不太理想,而且很烦人。我还没有真正研究过为什么会发生这种情况,因为当时解决方法对我来说还不错。

更新:道歉我在这里错了,你并不认为返回将是JSON,因此控制器更改将不会产生任何影响。

答案 2 :(得分:0)

尝试将返回的数据作为参数传递给回调函数:

$(document).ready(function( ) {
    $('#searchcontactform').submit(function(){

        $.get("ContactList-JPA/search", {textsent : 'Hello Controller'},
           function(data){
              callback(data);
        });

        function callback(textreceived){
           alert('In Callback. Text Received is: '+textreceived);
        };
    });
});

您还可以将回调函数设置为匿名函数,以便整理。

$(document).ready(function( ) {
    $('#searchcontactform').submit(function(){

        $.get("ContactList-JPA/search", {textsent : 'Hello Controller'},
           function(data){
              alert('In Callback. Text Received is: '+data);
        });
    });
});