【问题标题】:Grails render template or JSON?Grails 渲染模板还是 JSON?
【发布时间】:2014-06-24 14:29:42
【问题描述】:

我有一个上传和处理文件的控制器。之后,我希望将处理结果呈现在模态 div 中。我想知道将结果从控制器获取到 gsp 上的模态 div 的最佳方法是什么。我想到了一个模板,但我不知道如何指定模板的目标 div 应该是什么,因为这个模板不会通过单击按钮来呈现,其中模板呈现的目标被设置为属性,它会是定时完成(即文件完成上传时)。另一种方法是从控制器发回 JSON,但我不知道如何在正确的时间截取这个 JSON,因为我仍然不太了解 GSP 和控制器之间信息流的时序。我知道如何发送 JSON,但如何提醒 GSP “嘿,一些 JSON 现在已为您即将上升的模态做好准备。”这是我想要完成的一些伪代码。

控制器:

 upload() {
    // process file and store results in three integers
    // int1 = result1
    // int2 = result2
    // int3 = result3
    // send the three numbers to the gsp
    }

现在将这三个数字发送到 GSP 的最佳方法是什么,以便它们显示在一个模态对话框中,该对话框将像这样显示:

<div id="fileUploadResultsModal">
Results:
${int1}, ${int2}, ${int3}
</div>

这里是我的ajax上传功能相关的JS:

$("#chseFile").upload("${createLink(controller: 'customer', action: 'upload',)}",
                                            {dataTypegrp: parseInt(getCheckedValue(document.getElementsByName('dataTypegrp'))),
                                             fileTypegrp: parseInt(getCheckedValue(document.getElementsByName('fileTypegrp')))}, 
                                            function(success) {
                                                    $("#cancel1").trigger("click");
                                                    setTimeout(function(){ 
                                                        $("#summary").trigger("click");
                                                    }, 250);
                                                    displaySuccess(data);
                                            }, 
                                            function(prog, value) {
                                                console.log(value);
                                                $("#prog").val(value);
                                                if (value == 100) {
                                                    $("#prog").hide();
                                                    $("#progressbar").html("Uploading and processing. Please wait...");
                                                }
});

但现在 JS 抱怨“数据”没有定义。 “数据”是指从控制器返回的 JSON。

谢谢

【问题讨论】:

    标签: json grails


    【解决方案1】:

    您可以将它们呈现为 JSON:

    render( [ int1:111, int2:222, int3:333 ] as JSON )
    

    或作为 HTML 字符串

    render "<div id=\"fileUploadResultsModal\">Results:${int1}, ${int2}, ${int3}</div>"
    

    或使用模板

    render template:'/yourController/templateName', model:[ int1:111, int2:222, int3:333 ]
    

    TagLib

    render g.yourResultTag( int1:111, int2:222, int3:333 )
    

    对于这一点点信息,性能并不重要。这是一个品味问题,或者什么更适合您的客户。

    如果后者偏向 JSON,请使用 JSON 渲染。如果它混合了 JSON 和 HTML,请使用其他的。

    【讨论】:

    • 如果我像您的第一个示例那样使用 JSON 路由,我将如何控制渲染到哪个已经存在的“div”?
    • 发布你的 JS 代码。到处都应该很简单
    • 我的问题的核心是我不完全理解 ajax 序列。我有一个 ajax 调用来上传一个文件和一个与之关联的成功函数,但我不知道如何告诉成功函数从控制器获取返回的 JSON 数据。例如在 formRemote 中,您可以有一个属性 OnSuccess="doResult(data)"。但是,由于这是我自己的 JS ajax 调用,我不明白如何获取控制器呈现的“数据”变量。我用 JS 代码更新了原帖。
    • 看起来 data var 要么是 function(success) {..}success 参数,要么是它的字段。在 Firebug 中调试函数调用并查看。你用的是什么插件?
    • 所以,success 参数必须是您要显示的文本。你应该打电话给displaySuccess( success )
    【解决方案2】:

    在控制器内部你可以使用的控制器动作的enf

    render [data:['name':'firstname','surname':'secondName'] as JSON]
    

    这会将数据呈现给 GSP

    【讨论】:

      猜你喜欢
      • 2010-11-30
      • 2011-03-14
      • 1970-01-01
      • 2017-06-05
      • 2012-07-18
      • 2013-08-02
      • 2011-05-17
      • 2016-08-23
      • 1970-01-01
      相关资源
      最近更新 更多