我代理了对cfc的调用,该调用执行ftp“get”到本地临时文件。然后它读取文件,并应该将文件内容作为字符串返回。我知道代码有效,当我将它从cfc中拉出来进入常规cfm文件时,它完全符合预期。但是,在我的代理callBackHandler
中,cfc结果似乎为null。这是代理代码:
<cfajaxproxy cfc="ftpfunc" jsclassname="jsobj" />
function getFTP() {
...
var instance = new jsobj();
instance.setCallbackHandler(ftpSuccess);
instance.setErrorHandler(ftpError);
instance.setReturnFormat('plain');
instance.getJCL(lpar,remoteFile,userName,password);
}
..然后是callbackHandler,它应该具有从cfc返回的字符串:
function ftpSuccess(ftpReturn)
{
// error thrown right here: "ftpReturn is Null"
if (ftpReturn.length==0)
{ alert("Your FTP Get returned a blank file"); }
}
是否有特定的语法?例如,当返回类型是结构或查询时,您必须使用ftpReturn.DATA
之类的东西。直弦怎么样?
感谢您的帮助
编辑:这是cfc
<cffunction name="getJCL" output="false" access="remote" securejson="true">
<cfargument name="lpar" type="string" required="yes">
<cfargument name="remoteFile" type="string" required="yes">
<cfargument name="userName" type="string" required="yes">
<cfargument name="password" type="string" required="yes">
<cfset var ftpReturn = "">
<cfftp action="open"
connection="getConnection"
password="#arguments.password#"
secure="yes"
server="#arguments.lpar#"
stopOnError="no"
timeout="30"
username="#arguments.username#">
<cfset tempFile="D:\myDir\#RandRange(10000000,99999999)#.tmp">
<cfftp action="getFile"
connection="getConnection"
localFile="#tempFile#"
remoteFile="#arguments.remoteFile#"
transferMode="auto">
<cffile action = "read" file = "#tempFile#" variable = "Message">
<cfset ftpReturn = Message>
<cfreturn ftpReturn>
</cffunction>
答案 0 :(得分:0)
如果我删除了callbackHandler函数,我可以在fireBug的Console \ Response选项卡中看到实际的文件内容,即“test”
...
我也安装了fiddler,在json标签下我只得到“响应不包含有效的JSON文本”
所以你目前没有返回有效的JSON?
如果CF收到无效内容(而不是抛出错误),它可能会或者不是CF中的错误,但是将文件内容更改为validates并且可能会有效?< / p>
你也可以试试像......
<cftry>
<cfset deserializeJson(ftpReturn) />
<cfcatch>
<cfset ftpReturn = '{"error":"invalid json"}' />
</cfcatch>
</cftry>
...检测函数内部是否有效JSON,如果没有返回相应的消息。
不要忘记cfcomponent标签本身需要output=false
,否则你可能仍会从函数外部的区域添加空格。
还有其他一些事情 - 你实际上并没有使用Message
变量,所以只需:
<cffile action = "read" file = "#tempFile#" variable = "ftpReturn">
此外,随机数不保证是唯一的,因此除非您切换到以下内容,否则很有可能导致数据损坏:
<cfset tempFile="D:\myDir\#createUuid()#.tmp">