从Javascript调用Grails def

时间:2014-03-17 12:01:44

标签: jquery ajax tomcat grails groovy

我正在尝试向一个非常简单的Grails方法发出ajax请求:

def countRace() {
    Date date = params.date("date", 'yyyy-MM-dd');
    Integer count = Race.countByDate(date);
    log.info("Number of races on " + date + " is " + count);
    return [count : count]
}

我正在使用以下jQuery代码来执行此操作:

function updateDayRaceCount(id) {
    $.ajax({
       url: "${g.createLink(controller:'data', action:'countRace')}?date=" + id
    }).done(function(response) {
       alert(response);
    });
}  

我看到日志在服务器上触发,所以我知道该方法正在被点击:

grails.app.controllers.runnerdb.DataController Number of races on Thu Mar 06 00:00:00 GMT 2014 is 38

但ajax请求错误输出404。当我发现错误时,我发现它是Tomcat标准404页面,以及生成的URL,如下所示:

/runnerdb/data/countRace?date=<id here>

正被映射到:

 /runnerdb/WEB-INF/grails-app/views/data/countRace.jsp

这就是问题所在,因为我想Tomcat或grails正试图渲染一个不存在的视图。

我的问题是......

如何在grails中仅针对这一种方法停止此类行为,并强制它只返回int值?

1 个答案:

答案 0 :(得分:3)

默认情况下,Grails按惯例解析视图。在您的情况下,您将需要使用render而不是return。通过使用return,您可以告诉Grails使用return作为模型继续处理视图。

以下是渲染文本值的示例:

render(text: count)

或者,您可能希望将结果呈现为JSON(如果导入转换器):

render [count: count] as JSON