2014-02-17 2 views
4

Я пытаюсь сделать некоторые санитария о результатах вызова Facebook, но Coldfusion говорит мне, что переменная равна нулю:Cfhttp result struct ведет себя как null в CF8?

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":[]} 

Empty 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, поскольку я изменил свой токен и некоторые другие параметры.

+0

Можете ли вы включить звонок ''. И какая версия ColdFusion вы? Мне интересно - учитывая, что вы получаете JSON в теле - видите ли вы что-то похожее на то, что я вижу здесь: http://cfmlblog.adamcameron.me/2013/01/weird-behaviour-with-cfhttp-and -json.html. Различное проявление, но '' запутывается и ведет себя глупо. –

+0

Добавлена ​​распространенная информация, thx @AdamCameron Weird, эта ссылка не работает, но я смог найти сообщение в вашем блоге: к моему пониманию, которое можно исправить, установив соответствующее значение для getAsBinary. Однако, когда результат сбрасывается, my fileContent - это просто строка, например, как mimeType или заголовок возвращаются в ваш пример. –

ответ

3

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

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^