1

ローカルの一時ファイルへのftp「get」を実行するcfcへの呼び出しをプロキシしました。次に、ファイルを読み取り、ファイルの内容を文字列として返すことになっています。コードが機能することはわかっています。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>
4

1 に答える 1

0

callbackHandler 関数を削除すると、fireBug の Console\Response タブで、実際のファイル コンテンツ (「テスト」) を確認できます
...
フィドラーもインストールしましたが、json タグの下に「応答はありません」と表示されます。有効な JSON テキストが含まれています」

では、現在有効な JSON を返していませんか?

(エラーをスローするのではなく) 無効なコンテンツを受け取った場合に null を渡すのは、CF のバグである可能性がありますが、ファイルの内容を検証するものに変更すると、動作する可能性がありますか?


次のようなものを試すこともできます...

<cftry>
    <cfset deserializeJson(ftpReturn) />
    <cfcatch>
        <cfset ftpReturn = '{"error":"invalid json"}' />
    </cfcatch>
</cftry>

...有効な JSON であるかどうかを関数内で検出し、そうでない場合は適切なメッセージを返します。


output=falsecfcomponent タグ自体に 必要であることを忘れないでください。そうしないと、関数の外側の領域から空白が追加される可能性があります。


他にもいくつか-変数を実際に使用していないMessageので、次のようにします。

<cffile action = "read" file = "#tempFile#" variable = "ftpReturn">

また、乱数は一意であることが保証されていないため、次のように切り替えない限り、データが破損する可能性がわずかにあります。

<cfset tempFile="D:\myDir\#createUuid()#.tmp">
于 2012-06-30T14:09:40.763 に答える