我代理的CFC这确实一个ftp“得”到本地临时文件的调用。然后它读取文件,并假定将文件内容作为字符串返回。我知道代码的工作原理,当我将它从cfc中拉出到一个普通的cfm文件中时,它确实完成了预期的工作。然而,在我代理callBackHandler
,在CFC结果显示为空值。下面是代理代码:为什么cfreturn为空?
<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>
显示cfc,以便我们可以看到返回的beig。 – Paul
安装的Fiddler(http://fiddler2.com)并用它来观看请求/响应。检查员(Fiddler UI的右下角四分之一)有一个JSON选项卡,它将显示正在返回的数据的结构。如果没有显示任何内容,请使用RAW选项卡准确显示服务器返回的内容。这将让你知道它是否是一个服务器或客户端的问题 – barnyr
以我的经验,你得到空值,如果变量被deinstantiated。因此,如果CFFILE读取长度为0的文件,则Message可能会将Java指针指向null。 – Salsero69