ColdFusion AJAX - работает на CF9, а как на счет CF7?

У меня есть следующий, очень простой CFC, который я вызываю с помощью jQuery. Он отлично работает локально на CF9, но клиент на CF7, и в cfunction нет атрибута 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>

3 ответа

Решение

Попробуйте использовать jsonencode и jsondeencode с CFLib.org

Включите toJSON.cfc, затем используйте методы из него для сериализации вашей структуры.

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

Я никогда не использовал toJSON.cfc; Я всегда использовал более старый JSON.cfc, но не могу найти ссылку на него. Я не уверен, что он может обрабатывать структуру, содержащую запрос, я думаю, все, что вы можете сделать, это попробовать.

Изменить: Вот JSON.cfc, на который я ссылался: http://www.epiphantastic.com/cfjson/downloads.php

просто сделайте:

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

Есть больше аргументов, которые вы можете передать, я просто никогда не использовал их. Значения по умолчанию довольно хорошие.

Я думаю, что если вы делаете:-

<cffunction ....... output="true">
    ......
    ......
    <cfoutput>#ret#</cfoutput>
</cffunction>

Затем вызовите это через GET, это должно работать.

По общему признанию не проверено.

Другие вопросы по тегам