2016-12-22 2 views
2

Я пытаюсь передать данные JSON на страницу GSP и таблицу отображения.pass JSON in GSP страница

Ожидаемый 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] 

Page Исходный код:

<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

Пока вы получили его на работу, я думаю, может быть, вы манипулируете ваши данные в не стандартных методов, чтобы получить результат в вокруг вокруг.

Я попытаюсь объяснить альтернативный путь и путь, который может быть использован в вашем распоряжении, чтобы построить карту, которую вы отправляете, которые затем просто вынесенное в контроллере:

четкости соотв = [данных: [» система»,„Один“,„Test“]]

то, что вы едите:

//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 или другой формой дб л ookup в этом случае соотв.данные только становится список

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

Теперь мы снова наш объект, как у вас это

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

Если теперь сделать

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

Вы используете Groov в формате JSON для первого преобразования, что карту json и, наконец, преобразовать объект JSON в строку

У вас может быть функция в службе который возвращает либо JSON, либо завершенный объект String, чтобы контроллер динамически строит данные.

я только дал мои два цента, потому что, глядя на:

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 для результата поиска из одного из моих плагинов. Я сделал кое-что из json с этим и wschat плагинами.

Не проверял любой из выше всего происхожу от того, что, как я сделал это против вашего стиля, который выглядит необычно и возможное несоблюдение comforming к любым стандартам и трудный путь, чтобы идти о построении больших динамических наборов данных

0
[resp: resp] 

изменения к:

[resp: resp as JSON] 
+0

вы имеете в виду [resp: resp as JSON]? Потому что только «resp as JSON» возвращает пустую страницу вместо моего View – 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>