2011-12-28 5 views
1

CFScript에서 다음 함수를 작성 중이며 요청한 ReturnFormat을 확인하고 해당 형식으로 데이터를 반환하려고합니다. 함수에서 ReturnFormat을 전혀 정의하지 않았 음을 참고하십시오. 호출 할 때 ReturnFormat을 설정해야합니다.CFC 함수 내에서 ReturnFormat을 확인하고 선택한 형식으로 데이터를 반환하려면 어떻게해야합니까?

예를 들어,이 함수를 호출 할 수있는 URL과 유사한 것 :

: 지금 http://localhost/com/Calendar.cfc?method=getCalendars&UserName=demo&returnFormat=json

/** 
* 
* @hint Returns All Calendar records for one user. 
* @output false 
*/ 
remote any function GetCalendars(required string Username) { 
    var data = []; 
    var success = false; 
    var message = ""; 

    try { 
     query = new Query(); 
     query.setDataSource(APPLICATION.DSN); 
     query.addParam(name = "username", value = Username, cfsqltype = "varchar"); 
     query.setSQL(" 
      SELECT idn, CalendarName, CalendarURL, CalendarColor 
      FROM Calendars 
      WHERE Username = :username 
      ORDER BY CalendarName, idn 
     "); 
     result = query.Execute(); 
     rs = result.getResult(); 
     success = true; 
     message = "Success"; 
     records = rs.RecordCount; 
    } 
    catch (any excpt) { 
     success = false; 
     message = "An error occurred while getting calendars for user: " & Username; 
    } 
    finally { 
     //TODO: If ReturnFormat = json, return a JSON string 
     //TODO: If ReturnFormat = wddx, returna WDDX object 
     //TODO: If ReturnFormat = plain, return an XML string 
     return rs; 
    } 
} //end GetCalendars 



,이 방법은이 같은 ColdFusion에서 자동으로 포맷 된 JSON 문자열 중 하나를 반환합니다

{"COLUMNS":["IDN","CALENDARNAME","CALENDARURL","CALENDARCOLOR"],"DATA":[[1,"Demo Calendar 1","http:\/\/localhost\/calendar\/feeds\/demo1\/basic","#43cd80"],[2,"Demo Calendar 2","http:\/\/localhost\/calendar\/feeds\/demo2\/basic","#9a9cff"]]}

또는 이와 같은 WDDX 개체 :

<wddxPacket version='1.0'><header/><data><recordset rowCount='2' fieldNames='IDN,CALENDARNAME,CALENDARURL,CALENDARCOLOR' type='coldfusion.sql.QueryTable'><field name='IDN'><number>1.0</number><number>2.0</number></field><field name='CALENDARNAME'><string>Demo Calendar 1</string><string>Demo Calendar 2</string></field><field name='CALENDARURL'><string>http:\/\/localhost\/calendar\/feeds\/demo1\/basic</string><string>http:\/\/localhost\/calendar\/feeds\/demo2\/basic</string></field><field name='CALENDARCOLOR'><string>#43cd80</string><string>#9a9cff</string></field></recordset></data></wddxPacket>

하지만 returnFormat=plain을 설정할 때 "잘못된 반환 형식"오류와 함께 실패합니다.

기본적으로 ReturnFormat을 테스트 할 방법이 필요합니다. 그렇다면 JSON 데이터를 원하는 방식으로 반환하기 위해 자신 만의 리턴 서브 루틴을 작성할 수 있습니다 (소문자 누구나! -이 질문의 일부가 아닌 BTW를 수행하는 방법을 알고 있습니다). XML 형식.

답변

2

returnFormat을 감지하거나 수행하지 않습니다. 그것은 요점이 아닙니다. returnFormat은 CF에 결과를 래핑하는 방법을 알려줍니다. 반복 : 당신은 이것에 대해 걱정하지 않아도됩니다. 기간.

배열을 만드는 CFC 메서드를 제공하면 배열 만 반환됩니다. CF, returnformat = json이 있으면 JSON으로 변환 처리합니다.

returnformat = plain을 보면 배열을 일반 문자열로 사용할 수 없기 때문에 오류가 발생합니다.

의미가 있습니까?

오 - 그래서 마지막 단락을 봅니다. 자신 만의 복귀를 원한다면, returnformat에 의존해서는 안됩니다. 그것은 CF로 굽습니다. JSON, 마침표를 항상 반환하고 내 서식을 지정하기 위해 API를 작성합니다. 메소드에서 returnFOrmat = plain을 설정하면 CF가 아무것도하지 못하게합니다. 문자열을 반환하는 한 괜찮을 것입니다.