我有这个代码作为一个工作正常的cffunction:
<cfcomponent extends="core.core">
<cffunction name="loadService" access="remote" returnformat="JSON">
<cfscript>
objResponse = '{"CONFIG":[["internal"],[ "success"]],"DATA":[["Message1"]]}';
</cfscript>
<cfreturn objResponse>
</cffunction>
</cfcomponent>
我正在尝试将其转换为完整的cfscript函数,如下所示:
component extends="core.core"{
remote JSON function loadService(){
objResponse = '{"CONFIG":[["internal"],[ "success"]],"DATA":[["Message1"]]}';
SerializeJSON(objResponse);
return objResponse;
}
}
第一种方式返回JSON很好,我可以用jQuery处理它。第二个抛出错误“从loadService函数返回的值不是JSON类型。”
我已经尝试过使用和不使用SerializeJSON,并且两种方式都会抛出该错误。我也尝试过它而不在函数语法中指定JSON。这不会引发错误,但它会围绕它包装wddxpacket信息。这是我没有指定JSON时的样子:
<wddxPacket version='1.0'><header/><data><string>{"CONFIG":[["internal"],[ "success"]],"DATA":[["Message1"]]}</string></data></wddxPacket>
我被困在这上面了。任何帮助都会很棒。谢谢!
答案 0 :(得分:12)
CF9中正确的CFScript语法是:
remote any function loadService() returnformat="JSON" {
从技术上讲,&#34; JSON&#34;函数(see here for all returntypes)不是有效的返回类型,但是当你写:
remote JSON function
......你基本上这么说。
请注意,在基于标记的cffunction调用中,您没有指定returnType ...所以请默认猜测它是什么? (提示:任何)。
将returnType和returnFormat混合起来很容易。一个简单的调整,你应该很高兴。
完整代码
component extends="core.core" {
remote any function loadService() returnFormat="JSON" {
objResponse = '{"CONFIG":[["internal"],[ "success"]],"DATA":[["Message1"]]}';
SerializeJSON(objResponse);
return objResponse;
}
}
答案 1 :(得分:2)
另外,我注意到你有
SerializeJSON(objResponse);
在你的功能中。此行对您的函数返回没有影响。因此,可以轻松省略它,因为您的objResponse值已经在JSON字符串中。但是,如果objResponse的值类似于
objResponse = {
"CONFIG" = [["internal"], ["success"]],
"DATA" = [["Message1"]]
};
那么你可以做类似的事情
return serializeJSON(objResponse);
可以将您拥有的复杂数据转换为JSON字符串。
这是完整的功能
remote any function loadService()
returnFormat="JSON"
{
objResponse = {
"CONFIG" = [["internal"], ["success"]],
"DATA" = [["Message1"]]
};
return serializeJSON(objResponse);
}
答案 2 :(得分:1)
指定'returnFormat'的另一种方法是使用注释:
component extends="core.core" {
/**
* @hint loads properties of an object and returns them in as JSON
* @output false
* @returnFormat JSON
*/
remote struct function loadService() {
objResponse = {
CONFIG = [["internal"],[ "success"]],
DATA = [["Message1"]]
};
return objResponse;
}
}