如何在ColdBox中通过runEvent()获取按事件输出的JSON数据



我有一个通过event.renderData(data=mydata, "json")输出数据的事件。

当我通过浏览器访问它时,JSON数据会按预期返回。不过,如果我从另一个事件中调用该事件,我只会返回一个空字符串。我这样保存输出:

savecontent variable="local.eventResult" {
runEvent(event="mymodule:myhandler.myaction");
}

如果我在事件中转储数据,看起来没问题。我曾尝试通过return event.renderData(data=mydata, "json");获取数据并直接返回数据,即return mydata;,但没有成功。

我应该怎么做才能按预期获得数据?

我在ColdBox Slack频道上问了一个类似的问题,得到的回答是这种行为是故意的。不能使用renderData()返回runEvent()的输出。以下是我从Luis M收到的回复:

RenderData主要用于整理数据的请求,而不是事件如果您希望事件返回一些内容,那么只需使用return

示例:

function test( event, rc, prc  ) {
return "<p>MyViewlet</p>";
}

在您的示例中,如果您想将数据输出为JSON,您可以在处理程序中使用以下内容:

function myAction( event, rc, prc  ) {    
var myData = {
fruit = "apple",
vegetable = "carrot"
};
return serializeJSON( myData );
}

最新更新