1

我正在使用 Spring MVC 并尝试从我的控制器发送一个对象数组以使用 JQuery 自动完成。我已经设法用 Array 做到了List<String>。但我无法让它与对象数组一起使用。我需要标签和值是 JQuery 自动完成中的不同字符串。

根据自动完成 JQuery UI,我想做以下事情:

[ { label: "Label1", value: "Value1" }, ... ]

我已经设法让它在 JS 中工作

var obj = jQuery.parseJSON('[{"label":"Label1","value":"Value1"},{"label":"Label2","value":"Value2"}]');

但是当我在我的控制器中创建它时,我无法将它作为字符串发送到自动完成(由于自动完成中的成功不会触发并且响应(数据)不会运行)。所以我尝试创建如下内容。

    @RequestMapping(params = {"type=itemType"})
public @ResponseBody List<DataObject> returnItemType(@RequestParam("itemType") String itemType) {
    List<DataObject> objList = new ArrayList<DataObject>();
    objList.add(new DataObject("Label1", "Value1"));
    objList.add(new DataObject("Label2", "Value2"));
    return objList;
}

  private static class DataObject {
    private String label;
    private String value;

    public DataObject(String label, String value) {
      this.label = label;
      this.value = value;
    }

    public String toString() {
      return "label = " +label+ ", value = " +value;
    }
  }

如果我添加 Gsonreturn gson.toJson(objList);

JSON 在 firebug 中看起来不错。但是随后自动完成中的成功将不会运行,response(data)也不会运行来自 Gson 的字符串的任何原因。

自动完成的 JS

        $(function() {
    $("#itemType").autocomplete({
            source: function(request, response) {
                $.ajax({
                    url:         "autocomplete.do",   
                    dataType:    "json",
                    cache:       true,
                    contentType: "application/json; charset=utf-8",
                    data: { 
                        "type"   : "itemType",
                        "itemType" : $("#itemType").val()
                    },
                    success: function(data) {
                        response(data);
                    }

                });
            },
            select: function(event, ui) {  
                $("#itemType").val(ui.item.value); 
                $("#orderItemFilterForm").submit(); 
            },  
            minLength: 0
    });
    $('#itemType').click(function(){ 
        $(this).val("");
        $(this).data("autocomplete").search($(this).val()); 
    });         
});

有什么建议么?

4

1 回答 1

0

获取数据,如下所示:

success:function(data){
 data=eval("("+data+")");
console.log(data.label+"\t"+data.value);
}
于 2014-02-25T10:16:47.610 回答