2012-07-04 122 views
1

我想在我的Spring MVC应用程序中使用ajax的帮助下自动完成。我提到了this。但其中有一些问题。请指导我..jQuery-Ajax自动完成的Spring MVC没有响应

我的剧本就像是..

<script> 

$(function() { 
    $("#bName").autocomplete({ 
     source: function(request, response) { 
      $.ajax({ 
       url: "getBatchNames.jav", 
       dataType: "json", 
       data: { 
         term: request.term 
         }, 
       success: function(data) {     
        response($.map(data.batchNameList, function(item) { 
         return { 
          label: item.pinMasterBatchName, 
          value: item.pinMasterBatchName 
         }; 
        })); 
       } 
      }); 
     }, 
     minLength: 1, 
     open: function() { 
      $(this).removeClass("ui-corner-all").addClass("ui-corner-top"); 
     }, 
     close: function() { 
      $(this).removeClass("ui-corner-top").addClass("ui-corner-all"); 
     } 
    }); 
}); 

</script> 
.... 
<tr> 
          <td width="95%"> 
          <div class="ui-widget"> 
           <label style="width:35%;">Batch Name</label> 
           <form:input path="pinMasterBatchName" id="bName" class="txtBox"/> 
           </div> 
           </td> 
          </tr> 

的通话将控制器及其返回地图> ..我会介绍我做了什么..

在控制器类

@RequestMapping(value="/getBatchNames.jav", method = RequestMethod.GET) 
    @ResponseBody 
    public Map<String, List<PinMasterData>> getZipcodes() 
    { 

     System.out.println("helloooo"); 
     List<PinMasterData> batchNameList = pinService.ListBatchesUnderClient(45); 
     Map<String, List<PinMasterData>> pinMap = new HashMap<String, List<PinMasterData>>(); 
     pinMap.put("batchNameList", batchNameList); 
     return pinMap; 
    } 

而且在我的模型类是类就像

public class PinMasterData 
{ 

    @Id 
    @GeneratedValue 
    @Column (name = "Id") 
    private Integer Id; 

    @Column (name = "BatchName") 
    private String pinMasterBatchName; 

    @Column (name = "Prefix") 
    private String Prefix; 

实际上,该呼叫将发送给控制器并将其返回。但之后,jsp页面不显示文本字段下方的列表。问题是什么?请指导我.. 预先感谢

编辑..

success: function(data) { 
        response($.map(data.batchNameList, function(item) { 
         return { 
          label: item.pinMasterBatchName, 
          value: item.pinMasterBatchName 
         }; 
        })); 
          alert("hai"); 
       } 
      }); 

我曾试图这样(检查是否回调到AJAX)。但它没有显示该警报框太..

回答

0

控件是否达到成功回调?你可以验证把调试器语句如下所示。

success: function(data) {     
     response($.map(data.batchNameList, function(item) { 
      return { 
       label: item.pinMasterBatchName, 
       value: item.pinMasterBatchName 
}; 

很可能不是。尝试使用完整的回调。这样你将知道什么状态正在返回。如果存在json解析错误,jQuery不会将ajax调用视为成功。

http://api.jquery.com/jQuery.ajax/

查找complete(jqXHR, textStatus)

编辑

与此更换成功的情况。如果您的调用返回,那么执行应停止在调试器中。如果它没有返回,我会查看服务器日志,并查看由于某种原因,呼叫响应是否失败。如果它返回,那么我会查看数据对象,它应该包含响应的状态(请注意;我不记得确切的关键名称)。查看响应文本并复制responseText并将其放在http://www.jsonlint.com中,并查看它是否为有效的json。 (希望你在firefox中熟悉firefox的调试)。

complete: function(jqXHR, textStatus) {     
     debugger; 
     response($.map(data.batchNameList, function(item) { 
      return { 
       label: item.pinMasterBatchName, 
       value: item.pinMasterBatchName 
}; 
+0

我已经在成功内部发出警告。但它也没有显示。我认为它的反应(即与json),即时调用控制器的东西。我对这个Ajax真的很陌生。所以请指导我 –