【问题标题】:render data as JSON not working after grails upgrade from 1.3.4 to 2.0.3在 grails 从 1.3.4 升级到 2.0.3 后,将数据呈现为 JSON 不起作用
【发布时间】:2012-06-19 16:44:34
【问题描述】:

我在项目中使用 grails 1.3.4,一切正常,直到我决定将项目迁移到 grails 2.0.3。

对于我通过 gsp 页面通过 javascript 进行的每个 AJAX 调用,呈现为 JSON 方法对我来说都可以正常工作。但现在它不起作用。 我用于通话的代码是:

我的 GSP 页面中的 Javascript:

var url = "${createLink(controller:'user',action:'someAction')}";
$.get(url,function(data){
   if (data.results != "") {
     alert(data.results);
   }
});

我的控制器中的代码:

import grails.converters.JSON

....
....

def someAction = {
    def data = [results:"Ajax call working"]
    render data as JSON
}

上面的代码在 grails 1.3.4 中非常适合我,但现在我收到以下错误

No signature of method: grails.converters.JSON.render() is applicable 
for argument types: (com.xxxx.yyy.UserController$_closure36) 
values: [com.xxxx.yyy.UserController$_closure36@168d2e7]
Possible solutions: render(java.io.Writer), 
render(javax.servlet.http.HttpServletResponse),
every(), find(), find(groovy.lang.Closure), 
every(groovy.lang.Closure).

我真的被困住了,不知道该怎么办。有什么我想念的吗?

我也在使用 Groovy 版本:1.8.6 和 JVM:1.6.0_26

【问题讨论】:

    标签: jquery ajax json grails render


    【解决方案1】:

    试试这个模式:

    def someAction = {
        def data = [results:"Ajax call working"]
    
        render(contentType:'text/json'){
           data
        }
    }
    

    【讨论】:

    • Grey:它确实有效 :) 但我不确定为什么早期的模式无效。因为我在我的其他 grails 2.0.3 项目中使用这种模式并且它在那里工作。能否请给我一些关于此的更多信息。顺便说一句,非常感谢。
    • 我实际上不确定为什么一个有效而另一个无效 - 我认为它们是等效的。
    • Grey:我今天注意到我有两个不同的控制器,分别是 A 和 B。现在在 A 中呈现 JSON 数据正在工作,而在 B 中你发布的模式正在工作。两个包的导入几乎相同。不知道出了什么问题:(
    • 同样的事情发生在我身上,但来自过滤器。 “将对象渲染为 JSON”在我的项目中无处不在,但在过滤器中它返回的内容类型为 text/html。如上所示,我必须明确定义内容类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    相关资源
    最近更新 更多