Jquery ColdFusion AJAX——适用于CF9,CF7如何?

Jquery ColdFusion AJAX——适用于CF9,CF7如何?,jquery,ajax,coldfusion,coldfusion-9,coldfusion-7,Jquery,Ajax,Coldfusion,Coldfusion 9,Coldfusion 7,我用jQuery调用了以下非常简单的CFC。它在CF9上本地工作正常,但是客户端在CF7上,并且在CF7中的cffunction中没有returnformat属性。我怎样才能做到这一点?我尝试在返回的结构上使用SerializeJSON,但没有成功。谢谢 <cfsetting showdebugoutput="false"> <cffunction name="getPart" access="remote" returntype="any" returnformat="JS

我用jQuery调用了以下非常简单的CFC。它在CF9上本地工作正常,但是客户端在CF7上,并且在CF7中的cffunction中没有returnformat属性。我怎样才能做到这一点?我尝试在返回的结构上使用SerializeJSON,但没有成功。谢谢

<cfsetting showdebugoutput="false">

<cffunction name="getPart" access="remote" returntype="any" returnformat="JSON">
    <cfargument name="myarg" type="string" required="yes">

    <cfset var ret = StructNew()>
    <cfset ret.success = true>

    <cftry>

        <cfquery name="ret.part" datasource="dsn">
        (query goes here)
        </cfquery>

        <cfset ret.recordcount = ret.part.recordcount>

        <cfcatch type="any">
            <cfset ret.success = false>
            <cfset ret.error = cfcatch>
        </cfcatch>

    </cftry>

    <cfreturn ret>

</cffunction>
包括,然后使用其中的方法序列化结构

<cfset JSON = CreateObject( "component", "toJSON" )>
<cfreturn JSON.structToJSON(ret)>
我从未使用过toJSON.cfc;我一直使用较旧的JSON.cfc,但找不到指向它的链接。我不确定它是否能够处理包含查询的结构,我想您所能做的就是尝试一下

编辑:以下是我引用的JSON.cfc:

简单地做:

<cfset JSON = CreateObject( "component", "JSON" )>
<cfreturn JSON.encode(ret)>
你可以传递更多的论点,我只是从来没有用过。默认设置非常好。

包括,然后使用其中的方法序列化您的结构

<cfset JSON = CreateObject( "component", "toJSON" )>
<cfreturn JSON.structToJSON(ret)>
我从未使用过toJSON.cfc;我一直使用较旧的JSON.cfc,但找不到指向它的链接。我不确定它是否能够处理包含查询的结构,我想您所能做的就是尝试一下

编辑:以下是我引用的JSON.cfc:

简单地做:

<cfset JSON = CreateObject( "component", "JSON" )>
<cfreturn JSON.encode(ret)>

你可以传递更多的论点,我只是从来没有用过。默认设置非常好。

尝试使用CFLib.org中的jsonencode和jsondencode

尝试使用CFLib.org中的jsonencode和jsondencode

我认为如果您这样做:-

<cffunction ....... output="true">
    ......
    ......
    <cfoutput>#ret#</cfoutput>
</cffunction>
然后通过GET调用它,它应该可以工作

无可否认,没有经过测试。

我认为如果你这样做:-

<cffunction ....... output="true">
    ......
    ......
    <cfoutput>#ret#</cfoutput>
</cffunction>
然后通过GET调用它,它应该可以工作


无可否认,没有经过测试。

这是迄今为止效果最好的,但我的输出是这样开始的:{SUCCESS:true,RECORDCOUNT:5,PART:这与我在CF9中使用SerializeJSON但不使用returnformat=JSON时发生的情况相同。我不确定如何消除这种情况。嗯……使用access=remote代替access=remote,使用access=public.access=remote将以webservice格式返回它。在旧版本的coldfusion中,唯一可用的格式是wddx、 是的,这就是答案!我最终创建了一个单独的.cfm页面来调用CFC,然后它删除了WDDX标记。谢谢!这是迄今为止效果最好的,但我的输出是这样开始的:{SUCCESS:true,RECORDCOUNT:5,PART:这与我在CF9中使用SerializeJSON但不使用returnformat=JSON时发生的情况相同。我不确定如何消除这种情况。嗯……使用access=remote代替access=remote,使用access=public.access=remote将以webservice格式返回它。在旧版本的coldfusion中,唯一可用的格式是wddx、 是的,这就是答案!我最终创建了一个单独的.cfm页面来调用CFC,然后它删除了WDDX标记。谢谢!这有很大的潜力,但是我从toJSON.CFC中的safeText方法中得到了一个错误,因为传入的参数(应该是字符串)是布尔值,我不知道为什么。我也不太了解还有为什么它坚持在没有其他方法的情况下将根元素与数据一起传递。您的查询是否返回任何布尔值?您可能必须在查询中将它们转换为字符串。这不是JSON.cfc的问题,我将继续查找链接。不,仅此而已……根本没有布尔值。我一直在调试/转储/等等我想知道这件事是不是因为我传递了一个结构数组而阻塞了。我使用Ben Nadel的函数将查询转换为一个结构,然后尝试将其传递到structToJSON函数,然后它就死了。我找到了JSON.cfc并对其进行了更新。此外,access=remote需要是access=public才能删除wddx标记。这有很大的潜力l、 但是我从toJSON.cfc中的safeText方法中得到一个错误,因为传入的参数(应该是字符串)是一个布尔值,我不知道为什么。我也不太明白为什么它坚持在数据中传入根元素,而其他方法都没有。您的查询是否返回任何布尔值?您可能需要c将它们转换为查询中的字符串。这不是JSON.cfc的问题,我将继续查找链接。不,就是这样……根本没有布尔值。我一直在调试/转储/etc,我想知道这是不是因为我传递了一个结构数组而阻塞了。我使用Ben Nadel的函数将查询转换为一个结构,然后正在尝试我找到了JSON.cfc并对其进行了更新。另外,access=remote需要是access=public才能删除wddx标记。