Javascript 在GSP页面中传递JSON
我试图将JSON数据传递给GSP页面和显示表 预期的JSON:Javascript 在GSP页面中传递JSON,javascript,jquery,json,grails,gsp,Javascript,Jquery,Json,Grails,Gsp,我试图将JSON数据传递给GSP页面和显示表 预期的JSON: { "data": [ [ "Tiger Nixon", "System Architect", "Edinburgh" ] ]} 我正努力做到这一点: def resp = [data:["System", "One", "Test"]] [resp: resp] 并显示: <g:javascript> $(document).ready(functio
{
"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>
如何正确通过
UPD1:
当我传递字符串时,它工作:
视图:
页面源代码:
<script type="text/javascript">
var str = '[[ "Tiger Nixon", "System Architect", "Edinburgh"]]';
var json = JSON.parse(str);
$(document).ready(function() {
$('#example').DataTable( {
data: json
} );
} );
它会产生一个错误
[resp: resp]
改为:
[resp: resp as JSON]
已解决:
控制器:
def resp = '[[ \"Tiger Nixon\", \"System Architect\", \"Edinburgh\"]]'
respond resp, model:[resp: resp]
def obj = [["Tiger Nixon", "System Architect", "Edinburgh"]]
String resp = obj.encodeAsJSON();
respond resp, model:[resp: resp]
encodeAsJSON()在“”中生成正确的输出
视图:
var str='${raw(resp)}';
var json=json.parse(str);
$(文档).ready(函数(){
$('#示例')。数据表({
数据:json
} );
} );
虽然您已经让它工作了,但我认为您可能正在将数据转换为非标准方法,以获得一个全面的结果
我将尝试并解释一种替代方法,以及一种可以在您的服务中使用的方法,以构建您正在发送的地图,然后在controller中渲染该地图:
def resp = '[[ \"Tiger Nixon\", \"System Architect\", \"Edinburgh\"]]'
respond resp, model:[resp: resp]
def obj = [["Tiger Nixon", "System Architect", "Edinburgh"]]
String resp = obj.encodeAsJSON();
respond resp, model:[resp: resp]
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'
现在我们已经把我们的东西还给你了
def resp = [data:["System", "One", "Test"]]
or
Map resp = [data:["System", "One", "Test"]]
如果你现在这样做
String myResp = (resp as JSON).toString()
您使用groovasjson首先将该映射转换为JSON,最后将JSON对象转换为字符串
您可以在服务中使用一个函数,将JSON或完成的字符串对象返回给控制器,直接动态构建数据
我只给了我的两分钱,因为我看到:
def obj = [["Tiger Nixon", "System Architect", "Edinburgh"]]
看起来像是一些奇怪的地图,你正在建立只是为了配合你的工作直接与给定的地图,而不是这个奇怪的对象:
<g:javascript>
var str = '${raw(resp)}';
var jsonData = JSON.parse(str);
var jsonResult = jsonData.data;
$(document).ready(function() {
$('#example').DataTable( {
data: jsonResult
} );
} );
</g:javascript>
var str='${raw(resp)}';
var jsonData=JSON.parse(str);
var jsonResult=jsonData.data;
$(文档).ready(函数(){
$('#示例')。数据表({
数据:jsonResult
} );
} );
我想现在jsonResult
将只保留您正在查看的对象。我在我的一个插件中提供了一个链接,可以将javascript改进为搜索结果。我用它和wschat插件做了一些json的东西
我没有测试过上面的任何一个,只是继续我是怎么做的,与你的风格相比,你的风格看起来不同寻常,可能不符合任何标准,更难构建更大的动态数据集你是说[resp:resp as JSON]?因为只有“resp as JSON”返回空页面,而不是我的Viewyup。我忘了它是单片的。
String myResp = (resp as JSON).toString()
def obj = [["Tiger Nixon", "System Architect", "Edinburgh"]]
<g:javascript>
var str = '${raw(resp)}';
var jsonData = JSON.parse(str);
var jsonResult = jsonData.data;
$(document).ready(function() {
$('#example').DataTable( {
data: jsonResult
} );
} );
</g:javascript>