Я узнаю этот шаблон из блога Бена Наделя . В коде, который вы публикуете в своем вопросе, отсутствуют две важные части. Во-первых, метод, который вызывается cfinvoke
из вашего объекта application.apiCache
- вызов этого метода завершается неудачно, и генерируется исключение. И, во-вторых, код JavaScript, который вызывает этот метод.
Ошибка, на самом деле, имеет простую причину. Ваш код JavaScript, скорее всего, передает данные в виде строки, когда вы передаете объект JavaScript. Либо потому, что вы вызываете JSON.stringify
, либо потому, что какая-то «магия» используемой вами библиотеки сериализует объект в строку.
Решение состоит в том, чтобы вызвать DeserializeJSON
для четвертого аргумента (именуемые фильтры в соответствии с сообщением об ошибке) вашей функции ColdFusion. Я сам использую код, подобный следующему. bSave
становится true
только если аргумент может быть успешно преобразован в структуру.
Если в функции есть теги cfargument
, вы должны изменить атрибут type
рассматриваемого элемента на string
, соответственно.
<cfset local.struVals = {}>
<cfset local.bSave = false>
<cftry>
<cfset local.struVals = DeserializeJSON( Arguments.filters )>
<cfset local.bSave = true>
<cfcatch></cfcatch>
</cftry>
<cfif local.bSave>
</cfif>