Late at night, I put a function inside a .cfm template and tried to consume it from Ajax, but I received a JSON parse error that was displayed in Chrome's console when trying to invoke a function within a .cfm page. I had forgotten that Ajax functions should not be consuming a .cfm page and placed the exact same function within a component with a .cfc extension, and the issue went away. When a function is within a component with the access remote argument, ColdFusion will autogenerate a web services stub, but it does not do this within a .cfm page.

If you receive a JSON parse error using logic that is known to create a valid JSON object within a .cfm page, try putting the same code in a .cfc component and consume it there. It may solve this parse error for you as well. The code below has a 'proxyControllerUrl' variable that was initially using a template with a .cfm extension, and it failed. However, when I put the same function within a .cfc extension, it worked.


function getAllThemeSettingsFromIniStore(themeId){

	// Get all of the theme properties stored in the ini configuration file.
	$.ajax({
		type: "get",
		url: "<cfoutput>#application.proxyControllerUrl#?</cfoutput>method=getAllThemeSettingsFromIniStore",//Works with a .cfc component, fails when the method is inside a .cfm template.
		data: { // method and the arguments
			themeId: themeId
		},
		dataType: "json",
		cache: false,
		success: function (data){
			// Pass the data to the getAllThemeSettingsResult function. 
			getAllThemeSettingsResult(data);
		},
		error: function(xhr, textStatus, error){
			console.log(xhr.statusText);//Parse error shows up here when inside a .cfm template. 
			console.log(textStatus);
			console.log(error);
		}
	});
}//... function