3

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

在着手处理我正在处理的实际实时需求之前,我正在测试整个 AJAX+Spring MVC+jquery 组合,并使用一些非常基本的东西来让我的理解正确。

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

我看到正在调用回调函数(因为正在触发回调函数中的“警报”)所以我有点假设控制权正在转移到控制器并返回到回调方法,但我无法找出为什么从控制器返回的文本没有显示在回调方法的警报框中。不确定我在这里缺少什么来捕获回调方法中的返回值。

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

谢谢。

文本框和提交按钮的 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 中的 Jackson 依赖项:

           <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 />
4

3 回答 3

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行中放置一个断点

于 2012-10-30T19:41:27.297 回答
1

我认为问题在于您返回类型 String 并且出于某种原因 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,因此更改控制器不会产生任何影响。

于 2012-10-30T20:51:33.867 回答
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);
        });
    });
});
于 2012-10-30T19:18:39.017 回答