为什么cfreturn null?

时间:2012-06-28 20:51:35

标签: web-services coldfusion coldfusion-9 cfc

我代理了对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>

1 个答案:

答案 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">