Web services 为什么cfreturn为null?

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

我代理了一个对cfc的调用,cfc通过ftp“获取”本地临时文件。然后它读取文件,并将文件内容作为字符串返回。我知道代码是有效的,当我把它从cfc拉到一个常规的cfm文件中时,它完全按照预期的方式工作。但是,在我的代理
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">