使用cfscript函数的JSON响应

时间:2012-01-05 04:55:44

标签: json coldfusion

我有这个代码作为一个工作正常的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>

我被困在这上面了。任何帮助都会很棒。谢谢!

3 个答案:

答案 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; 
}
}