2017-07-19 27 views
2

jQuery UIのオートコンプリートを使用して、テキスト入力フィールドの候補を表示しています。 提案は、提案と呼ばれるJavascript配列に格納されます。Javaリスト<String>を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要素があります。誰でも助けてくれますか?私はここで間違って何をしていますか?

+0

ブラウザのコンソールで 'data'の値を出力しようとしましたか?あなたが私たちにその価値を与えてくれれば、私たちの手助けが楽になります。 – kcdragon

+0

代わりにResponseを返して、その中にエンティティを書き込む必要があります。または戻り値の型の前に@ResponseBodyを試してください。 – Apokai

答えて

2

は、あなたの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"); 

そして、あなたの春のコントローラで

@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も間違っています。経路は.htmlなしでautocompleteplayerです。

それ以外は、提案は非同期で作成されます。したがって、オートコンプリートのデータは常に空になります。私はそのプラグインを自分で使用しなかったので、データの更新機能があるかもしれません。それ以外の場合は、$.get()関数コールバックに入れてみてください。あなたは、Java

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

私はあなたの提案に従った。また、私はこのようにjsを修正しました:$( '#autocompleted')。オートコンプリート({ \t data:$ .get( '/ Fantacalc/autocompleteplayer.html'、function(data){ \t \t var suggestions = []; \t \t提案= data.data; \t}、 "JSON")、 \tはminLength:3 })。しかし、私は406エラーを受けた –

1

あなたはこのようなあなたのコントローラーを変更する必要があります

@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で簡単に自分の価値観を扱うことができます。 よろしく、

+0

ありがとう。 JSONオブジェクトは期待どおりに作成されます。これでオートコンプリートウィジェットにバインドする方法を見つける必要があります。 –

+0

メソッドに@Produces( "application/json")を追加します。更新しました – user7294900

0

に文字列としてJSON配列を返すことができ

関連する問題