Web services 为什么cfreturn为null?
我代理了一个对cfc的调用,cfc通过ftp“获取”本地临时文件。然后它读取文件,并将文件内容作为字符串返回。我知道代码是有效的,当我把它从cfc拉到一个常规的cfm文件中时,它完全按照预期的方式工作。但是,在我的代理Web services 为什么cfreturn为null?,web-services,coldfusion,coldfusion-9,cfc,Web Services,Coldfusion,Coldfusion 9,Cfc,我代理了一个对cfc的调用,cfc通过ftp“获取”本地临时文件。然后它读取文件,并将文件内容作为字符串返回。我知道代码是有效的,当我把它从cfc拉到一个常规的cfm文件中时,它完全按照预期的方式工作。但是,在我的代理callBackHandler中,cfc结果似乎为空。以下是代理代码: <cfajaxproxy cfc="ftpfunc" jsclassname="jsobj" /> function getFTP() { ... var
callBackHandler
中,cfc结果似乎为空。以下是代理代码:
<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);
}
是否要使用特定的语法?例如,当返回类型为结构或查询时,必须使用类似于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>
如果删除callbackHandler函数,我可以在fireBug的Console\Response选项卡中看到实际的文件内容,即“测试”…
我也安装了fiddler,在json标记下我只得到“响应不包含有效的json文本” 那么您当前没有返回有效的JSON 在CF中,如果接收到无效的内容(而不是抛出错误),它会传递null,这可能是一个错误,也可能不是一个错误,但是如果将文件内容更改为某个内容,那么它可能会工作
你也可以试试像
<cftry>
<cfset deserializeJson(ftpReturn) />
<cfcatch>
<cfset ftpReturn = '{"error":"invalid json"}' />
</cfcatch>
</cftry>
此外,随机数不一定是唯一的,因此除非您切换到:
<cfset tempFile="D:\myDir\#createUuid()#.tmp">
显示cfc,以便查看返回的内容。安装Fiddler()并使用它查看请求/响应。检查器(Fiddler UI的右下角)有一个JSON选项卡,它将向您显示返回数据的结构。如果没有显示任何内容,请使用RAW选项卡精确显示服务器返回的内容。这会让你知道这是服务器还是客户端的问题。根据我的经验,如果变量被卸载,你会得到空值。因此,如果CFFILE读取的文件长度为0,则消息可能有指向null的Java指针。该文件肯定不是空的。事实上,如果我删除callbackHandler函数,我可以在fireBug的Console\Response选项卡中看到实际的文件内容,即“test”,我也安装了fiddler,在json标记下,我只得到“响应不包含有效的json文本”谢谢,我已经尝试了您建议的一切。json错误捕获没有得到任何结果,空错误是相同的。将cfc函数returnformat更改为“plain”,以匹配js函数中的语句(防止cfc序列化结果),结果相同。如果将js的相应行更改为instance.setCallbackHandler(function(){console.log(arguments)}),会发生什么情况代码>?它返回0 null 1未定义
<cffile action = "read" file = "#tempFile#" variable = "ftpReturn">
<cfset tempFile="D:\myDir\#createUuid()#.tmp">