2012-06-28 3 views
1

로컬 임시 파일에 ftp "get"을 수행하는 cfc에 대한 호출을 프록시했습니다. 그런 다음 파일을 읽고 파일 내용을 문자열로 반환합니다. 나는 그것이 정상적인 cfm 파일로 cfc에서 꺼낼 때 코드가 올바르게 작동한다는 것을 알고있다. 그러나 내 프록시 callBackHandler에서 cfc 결과가 null로 나타납니다. 문자열이 CFC에서 반환해야 다음왜 cfreturn은 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를, :

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> 
+5

반환되는 beig을 볼 수 있도록 cfc를 표시합니다. – Paul

+0

Fiddler (http://fiddler2.com)를 설치하고이를 사용하여 요청/응답을 봅니다. 관리자 (피들러 UI 오른쪽 하단)에는 반환되는 데이터의 구조를 보여주는 JSON 탭이 있습니다. 아무 것도 표시되지 않으면 RAW 탭을 사용하여 서버가 반환하는 것을 정확하게 표시하십시오. 그게 당신이 서버 또는 클라이언트 문제인지 알게 될 것입니다. – barnyr

+0

변수가 deinstantiated되면 내 경험에 null이됩니다.따라서 CFFILE이 길이가 0 인 파일을 읽으면 Message에 null에 대한 Java 포인터가있을 수 있습니다. – Salsero69

답변

0

내가의 CallbackHandler 기능을 제거하는 경우, 내가 불을 지르고 실제 파일의 콘솔 \ 응답 탭에서 볼 수에게 있습니다 "테스트"내용
...
json 태그 아래에 "응답에 유효한 JSON 텍스트가 없습니다"라는 메시지가 표시됩니다

현재 유효한 JSON을 반환하지 않으셨습니까?

잘못된 내용 (오류가 아닌)을 받았지만 파일 내용을 validates으로 변경하면 작동하지 않을 수도있는 CF의 버그 일 수도 있고 아닐 수도 있습니다. 적절한 메시지를 반환하지 않을 경우

<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"> 
+0

감사합니다. 나는 당신이 제안한 모든 것을 시도했습니다. json 오류 트래핑 아무것도 얻지 못했습니다, null 오류가 동일합니다. js 함수의 명령문과 일치하도록 cfc 함수 returnformat을 "plain"으로 변경 (cfc가 결과 직렬화를 방지). – ion

+0

JS의 적절한 행을'instance.setCallbackHandler (function() {console.log (arguments)})로 변경하면 어떻게됩니까? –

+0

0을 반환합니다. \t null undefined – ion

관련 문제