How do I return JSON from an action in FW/1?

前端 未结 3 612
情书的邮戳
情书的邮戳 2021-01-24 20:50

FW/1 seems to be oriented to returning complete web pages what if JSON data is needed? A typical layout looks like:



        
相关标签:
3条回答
  • 2021-01-24 21:07

    As of FW/1 2.2, you can call:

    variables.fw.renderData( "json", result );
    

    in your controller and it will do what you want.

    0 讨论(0)
  • 2021-01-24 21:12

    I have used code that overrides the onMissingView() method of Framework.cfc.

    I wrap my response up in a variable named rc.json then use code similar to this in my Application.cfc.

    function onMissingView( rc ){
        if( structKeyExists( rc, 'json' ){
            var response = getPageContext().getresponse()
            response.setContentType( 'application/json' );
            return serializeJSON( rc.json );
        }
        else{
            //we need this to fire off valid onMissignView error.
            raiseException( "FW1.viewNotFound", "Unable to find a view for '#request.action#' action.", " '#request.missingView#' does not exist.");
        }
    }
    

    I use other logic to do a cfdump of rc.json when request is not an AJAX request. But this is scaled down to bare minimum.

    0 讨论(0)
  • 2021-01-24 21:23

    This will do it

     <!--- Load all variables into response rather than just rc --->
     <cfparam name="rc.response" default="#structNew()#">
     <cfparam name="rc.response.status" default="OK">
    
     <!--- Stop layouts from cascading --->
     <cfset request.layout = false>
    
     <cfsetting showDebugOutput="No">
     <cfheader name="Content-Type" value="application/json" />
    
      <cfoutput>#SerializeJSON(rc.response)#</cfoutput>
    
    0 讨论(0)
提交回复
热议问题