您的第一个问题将是returntype="JSON"
- 看起来您很困惑returntype
并且returnformat
. 有多种方法可以实现您想要做的事情,例如,每种方法都会返回相同的结果:
<!--- Function returns a struct, ask CF to convert it to JSON using returnformat: --->
<cffunction name="Test2" returntype="struct" returnformat="JSON" output="false" access="remote">
<cfset var myStruct={"Test"="A", "foo"="bar"} />
<cfreturn myStruct />
</cffunction>
<!--- Function uses a struct, but serializes as a JSON string before returning --->
<cffunction name="Test3" returntype="string" returnformat="plain" output="false" access="remote">
<cfset var myStruct={"Test"="A", "foo"="bar"} />
<cfreturn SerializeJSON(myStruct)>
</cffunction>
<!--- Same as above but another variation of struct notation.
Note that most CF environments will convert unquoted key names to uppercase
unless you enable serialization.preserveCaseForStructKey at application or CF Admin level --->
<cffunction name="Test4" returntype="string" returnformat="plain" output="false" access="remote">
<cfset var myStruct=structNew() />
<cfset myStruct['Test'] = "A" />
<cfset myStruct['foo'] = "bar" />
<cfreturn SerializeJSON(myStruct) />
</cffunction>
<!--- Manually build the JSON string yourself from scratch, beware of encoding/escaping issues --->
<cffunction name="Test5" returntype="string" returnformat="plain" output="false" access="remote">
<cfset var myJSONString='{"Test":"A","foo":"bar"}' />
<cfreturn myJSONString />
</cffunction>
请注意,仅以上内容不会将内容类型响应标头设置为application/json
,如果您的调用者确实关心这一点,那么您将需要类似:
<cfheader name="Content-Type" value="application/json; charset=utf-8" />
...但The value returned from the Test function is not of type JSON
您引用的错误是 CF 运行时错误,而不是浏览器/阿贾克斯错误。该错误的全文通常是:
The value returned from the Test function is not of type JSON. If the component name is specified as a return type, it is possible that either a definition file for the component cannot be found or is not accessible.