我正试图对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获得有效回复。
答案 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()
或类似的内容。