Solved

Coldfusion, jQuery, Ajax and adding cfsetting showdebugoutput="false" to the returned content.

Posted on 2011-03-09
9
522 Views
Last Modified: 2012-05-11
I was looking at Ray Camden's blog, and I found a cool little tidbit (he has sooo many).
Blocking ColdFusion Debugging for AJAX Requests

Can I do something similar with the attached code?  If so, how do I do it?  (by 'it', I mean, how do I apply <cfsetting showdebugoutput="false"> to the template loaded into the content area)

T.I.A. All!
The onClick event:
onclick="loadTemplate('<cfoutput>#request.thisModule#/templates/#request.thisTemplate#</cfoutput>','ajaxContainer',<cfoutput>#getEmailTemplates.layoutID#</cfoutput>), processTemplateChange('<cfoutput>#getEmailTemplates.layoutID#</cfoutput>');"

loadTemplate function:
function loadTemplate(templatePath,containerID,templateID) {
	$('#'+containerID).load(templatePath, function() {
		var cookies = document.cookie.split(";");
		for (var i = 0; i < cookies.length; i++) {
			var cookie = cookies[i];
			var eqPos = cookie.indexOf("=");
			var name = eqPos> -1 ? cookie.substr(0, eqPos) : cookie;
			document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:00 GMT';
		}
	});

	$('#vignetteLibraries').load('<cfoutput>#request.url#</cfoutput>admin/emailBeta/uiElements/cfm/element.vignette.libraries.cfm',{'templateID': templateID}, function() {
	});
}

Open in new window

0
Comment
Question by:brianmfalls
  • 5
  • 4
9 Comments
 
LVL 52

Accepted Solution

by:
_agx_ earned 500 total points
ID: 35085747
Why not just do it like he showed ie Enable it in OnRequestStart ?

<cffunction name="onRequestStart" returnType="boolean" output="false">

You could adapt it to key off of a URL variable too. Then you could selectively enable/disable debugging for any page by appending a parameter to the url

http://yoursite.com/somePage.cfm?enableDebugOutput=true

<cffunction name="onRequestStart" returnType="boolean" output="false">
	<cfargument name="thePage" type="string" required="true">
	<cfset var reqData = "">
		
	<!--- is it ajax --->
	<cfif structKeyExists(url, "enableDebugOutput")>
		<cfsetting showdebugoutput="false">
	</cfif>
			
	<cfreturn true>
</cffunction>

Open in new window

0
 
LVL 1

Author Comment

by:brianmfalls
ID: 35085837
Are you saying that all I have to do is add "enableDebugOutput=true" to my url string?  Really?  If it's that simple, that would be really cool!

Like so?
onclick="loadTemplate('<cfoutput>#request.thisModule#/templates/#request.thisTemplate#</cfoutput>?enableDebugOutput=true','ajaxContainer',<cfoutput>#getEmailTemplates.layoutID#</cfoutput>), processTemplateChange('<cfoutput>#getEmailTemplates.layoutID#</cfoutput>');"

I can't do it exactly as he did, since I am none of what I posted is in a cfc. The onclick is in an image tag, within a carousel that displays available templates.  The script is an included element in a custom framework.
0
 
LVL 52

Expert Comment

by:_agx_
ID: 35085971
Almost.  You also need to add the snippet above to your onRequestStart method too. But yeah, it should be that simple.
0
Resolve Critical IT Incidents Fast

If your data, services or processes become compromised, your organization can suffer damage in just minutes and how fast you communicate during a major IT incident is everything. Learn how to immediately identify incidents & best practices to resolve them quickly and effectively.

 
LVL 1

Author Comment

by:brianmfalls
ID: 35086130
Oh man.  I wasn't thinking about the applicaiton.cfc at all...  lol  Thanks aqx.

Two more quick questions on the snippet you posted.

Is the following argument passed by coldfusion by default, or do I need to specify it in each request?
<cfargument name="thePage" type="string" required="true">

What is the following var doing?
<cfset var reqData = "">
0
 
LVL 1

Author Comment

by:brianmfalls
ID: 35086172
Now that I think about it, neither are required.  I can see now that you just copied that off of Ray's site.  Thanks again aqx.  As always, your input is spot on.
0
 
LVL 52

Expert Comment

by:_agx_
ID: 35086174
It's passed by default.  So you don't have to do anything extra.

<cfset var reqData = "">

Actually you can get rid of that.  It *was* used in Ray's example to hold the getHttpRequestData(). But it's not needed in the new example.
0
 
LVL 52

Expert Comment

by:_agx_
ID: 35086200
Now that I think about it, neither are required.  

Actually the argument is required.  The OnRequestStart function *must* have a specific signature or it may not work at all.  So don't change anything about the cffunction name or it's arguments.

<cffunction name="onRequestStart" returnType="boolean" output="false">
	<cfargument name="thePage" type="string" required="true">
	<cfif structKeyExists(url, "enableDebugOutput")>
		<cfsetting showdebugoutput="false">
	</cfif>
	<cfreturn true>
</cffunction>

Open in new window

0
 
LVL 1

Author Comment

by:brianmfalls
ID: 35086226
True.  I was just getting to pull my foot out of my mouth when you were kind enough to do it for me.  :)
0
 
LVL 52

Expert Comment

by:_agx_
ID: 35086355
You're welcome. I remember learning that the frustrating way: never change the signature of Application.cfc methods ;-)
0

Featured Post

Webinar: Aligning, Automating, Winning

Join Dan Russo, Senior Manager of Operations Intelligence, for an in-depth discussion on how Dealertrack, leading provider of integrated digital solutions for the automotive industry, transformed their DevOps processes to increase collaboration and move with greater velocity.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I found this questions asking how to do this in many different forums, so I will describe here how to implement a solution using PHP and AJAX. The logical flow for the problem should be: Write an event handler for the first drop down box to get …
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question