【问题标题】:Convert a Java List<String> into a Javascript array将 Java List<String> 转换为 Javascript 数组
【发布时间】:2017-12-25 02:19:49
【问题描述】:

我正在使用 jQuery UI 自动完成来显示文本输入字段的建议。 建议存储在称为建议的 Javascript 数组中。

我正在尝试从数据库中获取建议数组的字符串值,但我无法将 List 对象转换为 Javascript 数组。

Javascript:

var suggestions = [];
$.get('/mywebapp/autocompleteplayer.html', function(data){
    parsed = JSON.parse(data);
    suggestions = parsed.split(",");
}, "json");

$('#autocompleted').autocomplete({
    data: suggestions,
    minLength: 3
});

Spring MVC 控制器:

@Controller
public class AutocompletePlayerController {

    @RequestMapping(value = "/autocompleteplayer")
    public List<String> getPlayerSuggestions(){

        List<String> myList;
        //code that fills myList with all of the players' full names from the database, omitted for brevity
        return myList;
    }
}

我知道我没有正确解析 AJAX 响应,因为我从浏览器控制台检查了建议数组有 0 个元素。谁能帮我?我在这里做错了什么?

【问题讨论】:

  • 你试过在浏览器控制台输出data的值吗?如果您给予我们这样的价值,这将使我们更容易提供帮助。
  • 也许您应该返回一个响应并将实体写入其中。或者在返回类型之前尝试@ResponseBody。

标签: javascript java jquery spring-mvc jquery-ui


【解决方案1】:

您需要在您的 js 中这样使用它(数据是响应实体,而不是数据 - 它在 data.data 中):

$.get('/mywebapp/autocompleteplayer', function(data){
    suggestions = data.data; 
    $('#autocompleted').autocomplete({ // not sure how to use your plugin
        data: suggestions,
        minLength: 3
    });
}, "json");

在你的 spring 控制器中,添加 @ResponseBody 注解

@RequestMapping(value = "/autocompleteplayer")
@ResponseBody
public List<String> getPlayerSuggestions(){

    List<String> myList;
    //code that fills myList with all of the players' full names from the database, omitted for brevity
    return myList;
}

什么都不需要JSON.parse,jquery 已经做到了。

/mywebapp/autocompleteplayer.html 听起来也有问题。路由是autocompleteplayer,没有.html

除此之外,建议是异步创建的。因此,您在自动完成中的数据将始终为空。我自己没有使用该插件,因此可能有数据更新功能,否则请尝试将其放入 $.get() 函数回调中。

【讨论】:

  • 我听从了你的建议。此外,我修改了这样的js: $('#autocompleted').autocomplete({ data: $.get('/Fantacalc/autocompleteplayer.html', function(data){ varSuggestions = [];Suggestions = data.data; }, "json"), minLength: 3 });但我收到 406 错误
【解决方案2】:

你可以在java中将json数组作为字符串返回

@Produces("application/json")
public String getPlayerSuggestions(){
....
 Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
 String jsonString = gson.toJson(myList);
 return jsonString;
}

【讨论】:

  • 谢谢。 JSON 对象按预期创建。现在我只需要找到一种方法将其绑定到自动完成小部件。
  • 将@Produces("application/json") 添加到方法中。更新
【解决方案3】:

你需要像这样修改你的控制器:

@RequestMapping(value = "/autocompleteplayer", method=RequestMethod.GET)
@ResponseBody
public String getPlayerSuggestions(){

    List<String> myList;
    JSONArray jsonArray = new JSONArray();


    for(String item: myList){

        JSONObject jsonObj = new JSONObject();
        jsonObj.put("Item", item);
        jsonArray.put(jsonObj);

    }

    return jsonArray.toString();
}

那么您可以使用JSON 轻松处理您的价值观。 问候,

【讨论】:

    猜你喜欢
    • 2021-09-17
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    相关资源
    最近更新 更多