2016-12-22 48 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

雖然你已完成了工作,我想也許你操縱你的數據轉化爲非標準方法得到的結果繞路而行。

我會盡量解釋的另一種方式,並且可以在服務中可以用於構建要發送,然後只是呈現在控制地圖的方式:

高清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或DB升其他形式生成的列表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改善爲搜索結果。我用這個和wschat插件做了一些json的東西。

沒有測試任何上述只是要什麼我怎麼做的VS你的風格,看起來不尋常的和可能的非comforming任何標準,並着手建立更大的動態數據更難方式,設立

0
[resp: resp] 

變化:

[resp: resp as JSON] 
+0

你的意思[resp:resp as JSON]?因爲只有「resp as JSON」返回空白頁面而不是我的視圖 – ziftech

+0

是。我忘了它是單片的。 –

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>