JSON - это просто строка, поэтому вам нужно «обработать» вызов метода до того, как он достигнет фактического уровня обслуживания.
Danimal прав в том, что вам нужно создать оболочку слоя веб-службы вокруг вашей службы.
Итак, ваш метод обслуживания выглядит следующим образом:
<cffunction name="CreateSubscription" access="public" returntype="struct" output="false">
<cfargument name="listID" required="true" type="numeric">
<cfargument name="emailaddress" required="true" type="string">
<cfargument name="firstname" required="true" type="string">
<cfset var resultset = {success=false}>
<!--- Validate your listid and subscription details --->
<!--- If Valid Then insert subscription --->
<cfset resultset.success = true>
<!--- else --->
<cfset resultset.message = 'kerboom!'>
<!--- only return what you need as a struct, not the whole local scope! --->
<cfreturn resultset />
</cffunction>
Ваш API подписки выглядит так:
<cffunction name="subscribeAPI" access="remote" returntype="struct" returnformat="json" output="false">
<cfargument name="JSONPacket" type="string" required="true" hint="data structure received from call">
<cfset var incomingData = deserializeJSON(arguments.JSONPacket)>
<cfset var resultset = {success=false,message='invalid data'}>
<cfif StructKeyExists(incomingData, "apiAction")>
<cfif incomingData.apiAction EQ "create">
<!--- You should also check you have the required fields for the createSubscription method here too. --->
<cfset resultset = subscriptionService.createSubscription(incomingData)>
</cfif>
<cfelse>
<cfset resultset.message = 'No API Action specified'>
</cfif>
<cfreturn resultset>
</cffunction>
Таким образом, вы нажимаете JSON на API подписки, который преобразует данные в структуру и гарантирует, что у вас есть все нужные данные, и передает их службе подписки. Метод createSubscription в службе подписки проверяет, существует ли listid, и проверяет, подписан ли уже человек. Если список верный, а подписка не существует, вставьте новую подписку в базу данных, в противном случае возвращайте результаты, указывающие на ошибки в структуре, на уровень API, который преобразует его в JSON и возвращает его.
Преимущество этого состоит в том, что вы можете повторно использовать службы в своем приложении, не проходя через уровень API, а ваш уровень API обрабатывает запросы на правильные методы обслуживания и следит за тем, чтобы для них были доступны соответствующие данные. ,
Не передавайте локальную область вокруг! Там может быть множество вещей, включая все другие методы в сервисе. Просто верните то, что требуется, и ничего больше.
Есть и другие способы решения этой проблемы, которые могут быть более точными - например, вы можете фактически поместить аргументы в вызов метода метода для CFC из JSON. Вы можете использовать cfajaxproxy, чтобы создать слой между вашим сервисом и вашим javascript, позволяя вам вызывать ваши методы cfc непосредственно как функции javascript. И я уверен, что есть и другие решения.
Помните .... ColdFusion == Серверная часть, Javascript == Клиентская сторона. Разделите их. Поместите слой между ними для обработки сообщений.
Надеюсь, это поможет.