Структура результата Cfhttp ведет себя так, как если бы она была нулевой в CF8?

Я пытаюсь немного обработать результаты звонка в Facebook, но Coldfusion сообщает мне, что переменная равна нулю:

FILECONTENT null <br>The error occurred on line 66.

Вот строка, которая вызывает ошибку:

<cfif isDefined("storeFeedJSON.fileContent")>
    <cfset storeFeedJSON.fileContent = process.CleanBadUnicode("#storeFeedJSON.fileContent#")>
</cfif>

Структура явно не нулевая, поскольку я завернул ее в «isDefined», и когда я выгружаю storeFeedJSON, я вижу, что fileContent выглядит так:

{"data":[]}

Пустой JSON, но все еще не нулевой...

EDIT: вот звонок, который я забыл туда вставить:

<cfset fbURL = "https://graph.facebook.com/#qStoreFBPages.pageID#/#fbEdge#?fields=#fbFields#&since=#fbSinceTime#&#qToken.objectValue#">
    <cfhttp result="storeFeedJSON" url="#fbURL#" method="get"></cfhttp>

что, вероятно, в конечном итоге будет выглядеть примерно так:

<cfhttp result="storeFeedJSON" url="https://graph.facebook.com/1749383765/posts?fields=created_time&since=1389296713&access_token=CAAH6oehQqUUU2IALvt0ZB3mdE6E2LCaldFc1TjIqxALUZBMqZC01O2hQXkOX8ROI9QBHn7WjWrHHneazAP4gWbj0MBsRUlel9TAG52kjBm0bBOUHVEFmEusEUHfhznlqzH1GMgCpCU4z4SmgXU8oFZBPDyAv1ByJu167jgkVd6UROWtDZBNBCP&expires=5184000" method="get"></cfhttp>

Обратите внимание, что это не приведет к действительному ответу от Facebook, так как я изменил свой токен и некоторые другие параметры.


person Carl Campbell    schedule 17.02.2014    source источник
comment
Не могли бы вы включить вызов <cfhttp>. А какая у вас версия ColdFusion? Интересно, учитывая, что вы получаете JSON в теле, видите ли вы что-то похожее на то, что я видел здесь: cfmlblog.adamcameron.me/2013/01/. Различные проявления, но <cfhttp> путаются и ведут себя глупо.   -  person Adam Cameron    schedule 18.02.2014
comment
Добавлена ​​распространенная информация, спасибо @AdamCameron Странно, эта ссылка не работала, но я смог найти сообщение в вашем блоге: насколько я понимаю, это можно исправить, установив соответствующее значение для getAsBinary. Однако, когда результат сбрасывается, мой fileContent представляет собой просто строку, например, как mimeType или заголовок возвращаются в вашем примере.   -  person Carl Campbell    schedule 19.02.2014


Ответы (1)


Я не думаю, что вы можете переназначить свойства структуры storeFeedJSON. storeFeedJSON — это результат вашего cfhttp, верно? как в

<cfhttp url="xyz" result="storeFeedJSON">

... который я считаю защищенной или неизменной структурой данных. Очевидно, вы можете передать его в качестве аргумента для своей функции, но поместить вывод в какую-либо другую переменную или, возможно, прямо в десериализацию json.

<cfset local.cleanFileContent = process.CleanBadUnicode(storeFeedJSON.fileContent)>
<cfdump var="#deserializeJSON(local.cleanFileContent)#">

... и пока я на этом, вы можете использовать getasbinary="never", потому что Facebook может когда-нибудь предоставить вам двоичные данные, или изменить свои заголовки, или что-то еще, и тогда ваш код сломается. Если вам нужно получить двоичный файл, вам понадобится cfhttp.fileContent.toString() или что-то в этом роде.

person changokun    schedule 17.02.2014