2016-12-22 3 views
2

JSONデータをGSPページと表示テーブルに渡そうとしています。GSPページのJSONを渡します。

期待JSON:

{ 
    "data": [ 
    [ 
     "Tiger Nixon", 
     "System Architect", 
     "Edinburgh" 
    ] 
]} 

私はそれを作るしようとしている:

def resp = [data:["System", "One", "Test"]] 

[resp: resp] 

と表示:

<g:javascript> 
    $(document).ready(function() { 
    $('#example').DataTable({ 
    "ajax": "${raw(resp)}" 
    }); }); 
</g:javascript> 

しかし、ページのソースコードの結果は次のとおりです。

$(document).ready(function() { 
    $('#example').DataTable({ 
     "ajax": "\u007bdata=\u005bSystem\u002c One\u002c Test\u005d\u007d" 
    }); 

正しく渡すには?

UPD1:私は、文字列を渡すと

それが動作:

ビュー:

<g:javascript> 
     var str = '${raw(resp)}'; 
     var json = JSON.parse(str); 
     $(document).ready(function() { 
     $('#example').DataTable({ 
      data: json 
     }); 
    }); 
    </g:javascript> 

コントローラー:

def resp = '[[ \"Tiger Nixon\", \"System Architect\", \"Edinburgh\"]]'  
respond resp, model:[resp: resp] 

ページのソースコード:

<script type="text/javascript"> 

    var str = '[[ "Tiger Nixon", "System Architect", "Edinburgh"]]'; 
    var json = JSON.parse(str); 
    $(document).ready(function() { 
    $('#example').DataTable({ 
     data: json 
    }); 
}); 

しかし、私は

def resp = [["Tiger Nixon", "System Architect", "Edinburgh"]] 

を渡すしようとすると、それはにエラー

答えて

2

を、私は多分あなたが結果を得るために非標準の方法にあなたのデータを操作していると思います方法についてラウンド。

I代替方法、その後、ちょうどコントローラでレンダリングあなたが送信されているマップを構築するためにあなたのサービス内で使用可能な方法を試してみて、説明します:

DEF RESP = [データ:[」

//A groovy map object 
Map resp = [:] 
//It has one element called data which contains a list 
resp.data=[] 
//add in system 
resp.data << 'system' 
resp.data << 'One' 
resp.data << 'Test' 

これは、いくつかのfindByまたはデシベルLの他の形式で生成され、リストされていることがあります。あなたはそこにある持っているどのようなシステム」、 『ワン』、 『テスト』]]

その場合はresp。データは単にリスト

def myList=['system','one','Test'] 
resp.data=myList 

なり今、私たちは、あなたが今

String myResp = (resp as JSON).toString() 

を行う場合は、当社オブジェクトは、あなたがそれを

def resp = [data:["System", "One", "Test"]] 
or 
Map resp = [data:["System", "One", "Test"]] 

を持っていたとして、あなたが最初にそれを変換するために、JSONとしてgroov使用しているバック持っていますjsonにマップし、最後にJSONオブジェクトを文字列に変換します

サービス内で機能を持つことができますJSONまたは終了したStringオブジェクトのいずれかをコントローラに直接返して、データを動的に構築します。

を見ているので、私は私の2セントを与えている:

def obj = [["Tiger Nixon", "System Architect", "Edinburgh"]] 

は、あなただけのこの奇妙なオブジェクトではなく、指定されたマップを直接操作するためにあなたの java script which I think could possibly do with improvementに一致するように構築されているいくつかの奇妙なマップのように思えます
<g:javascript> 
    var str = '${raw(resp)}'; 
    var jsonData = JSON.parse(str); 
var jsonResult = jsonData.data; 
    $(document).ready(function() { 
    $('#example').DataTable({ 
     data: jsonResult 
    }); 
}); 
</g:javascript> 

私が今考えているのはjsonResultだと思います。私は自分のプラグインの中から検索結果にjavascriptを改善するためのリンクを提供しました。私はそれとwschatプラグインでいくつかのjsonのことをやった。

はちょうど私がどの規格に珍しいと可能な非comformingと大きなダイナミックデータを構築するについて行くには難しい方法を探しますあなたのスタイル対それをやったか何に行く上記のいずれかをテストしていません

0
[resp: resp] 

変更生成します

解決
[resp: resp as JSON] 
+0

はあなたが意味するか設定します[resp:resp as JSON]? 「resp as JSON」だけが私のビュー – ziftech

+0

yupの代わりに空のページを返すからです。私はそれがモノリシックであることを忘れていた。 –

0

: コントローラー:

def obj = [["Tiger Nixon", "System Architect", "Edinburgh"]] 
String resp = obj.encodeAsJSON(); 
respond resp, model:[resp: resp] 

encodeAsJSONは()

ビュー「」の右出力を生成:あなたはそれが動作するようになっている一方

<g:javascript> 
    var str = '${raw(resp)}'; 
    var json = JSON.parse(str); 

    $(document).ready(function() { 
    $('#example').DataTable({ 
     data: json 
    }); 
}); 
</g:javascript> 
関連する問題