2016-12-22 3 views
2

Ich versuche, JSON-Daten an die GSP-Seite und Anzeigetabelle übergeben.übergeben Sie JSON in GSP Seite

Expected JSON:

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

Ich versuche, es zu machen mit:

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

[resp: resp] 

und Anzeige:

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

aber ergeben Seite Quellcode ist:

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

Wie man es richtig übergibt?

UPD1:

Wenn ich eine Zeichenfolge übergeben es funktioniert:

Ausblick:

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

Controller:

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

Seite Quellcode:

<script type="text/javascript"> 

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

Aber wenn ich versuche

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

ein Fehler

Antwort

2

Während Sie es bekommen haben zu arbeiten, ich denke, vielleicht haben Sie Ihre Daten in Nicht-Standard-Methoden manipulieren ein Ergebnis in einem bekommen um den Weg herum.

Ich werde versuchen, eine alternative Art und Weise zu erklären, die in Ihrem Service verwendet werden können die Karte die Sie senden zu bauen, die dann nur in der Steuerung gemacht:

def bzw. = [Daten: [“ System“, "One", "Test"]]

Was haben Sie es:

//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' 

Dies ist eine Liste von einigen findBy oder eine andere Form von db l erzeugt worden sein ookup in welchem ​​Fall resp.Daten wird nur die Liste

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

Jetzt haben wir unser Objekt zurück, wie Sie es hatte

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

Wenn Sie jetzt

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

Sie verwenden groov als JSON konvertiere zunächst, dass map to json und konvertiert schließlich das JSON-Objekt in einen String

Sie könnten eine Funktion in einem Dienst haben Dies gibt entweder das JSON- oder das fertige String-Objekt an den Controller zurück, der die Daten direkt dynamisch erstellt.

Ich habe nur meine zwei Cent gegeben, weil sich bei:

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

Scheint wie eine ungerade Karte einfach in den Bau sind Ihre java script which I think could possibly do with improvement passen direkt mit dem angegebenen Karte zu arbeiten, anstatt dieses seltsame Objekt:

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

Ich denke jetzt jsonResult wird nur halten das Objekt, das Sie betrachteten. Ich stellte einen Link zur Verbesserung von Javascript zu einem Suchergebnis von einem meiner Plugins zur Verfügung. Ich habe ein paar json-Sachen mit diesen und wschat-Plugins gemacht.

Hat jemand von oben nur gehe nicht getestet, was, wie ich tat es gegen Ihren Stil, die ungewöhnliche und möglichen nicht comforming zu allen Standards und eine härtere Art und Weise über den Aufbau größere dynamische Daten zu gehen sieht setzt

0
[resp: resp] 

Änderung erzeugt weitergeben müssen:

[resp: resp as JSON] 
+0

meinst du [resp: bzw. JSON]? Weil nur "resp. JSON" eine leere Seite anstelle meiner Ansicht – ziftech

+0

yup zurückgibt. Ich habe vergessen, dass es monolithisch ist. –

0

Gelöst: Controller:

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

encodeAsJSON() erzeugt rechten Ausgang in „“

Ausblick:

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

    $(document).ready(function() { 
    $('#example').DataTable({ 
     data: json 
    }); 
}); 
</g:javascript>