Cfhttp结果结构在CF8中的行为就像是null吗?

时间:2014-02-17 20:42:13

标签: coldfusion struct null coldfusion-8 cfhttp

我正试图对Facebook的调用结果进行一些卫生,但Coldfusion告诉我该变量为空:

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

以下是导致错误的行:

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

结构显然不是null,但是我将它包装在“isDefined”中,当我转储storeFeedJSON时,我可以看到fileContent看起来像

{"data":[]}

清空JSON但仍然不为空......

编辑:这是我忘了放在那里的电话:

<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获得有效回复。

1 个答案:

答案 0 :(得分:3)

我认为你不能重新分配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()或类似的内容。