Passing data to a CFC function using JSON via AJAX Post

I have a jquery submit event that collects form data and puts it in a jquery object. I want to take this jquery object and pass it to the coldfusion web service, where I can use it to update the XML file. I don’t want a response from the web service, I just want to send it to the web service and play with the data from there.

Client side / jQuery:

$("#update").on('submit',function() { $linkName = $('#update').find('#linkName').val(); $linkURL = $('#update').find('#linkURL').val(); $linkInfo = $('#update').find('#linkDesc').val(); $numOfLinks = $('.linkSection').length; if ($numOfLinks > 0){ // Here the sub link names and urls put into an array $subLinkName = []; $subLinkURL = []; $('.linkSection').each(function(index, element) { $subLinkName.push($(this).find('#subLinkName').attr('value')); $subLinkURL.push($(this).find('#subLinkURL').attr('value')); $data = {linkName: $linkName, linkURL: $linkURL, linkID : $linkID, linkDescription : $linkInfo, subLinkNames : $subLinkName, subLinkURLs : $subLinkURL}; }); // Optionally, you could put the name and url in the array object here but not sure which is better to do //$subLink =[]; //$('.linkSection').each(function(index, element) { //$subLink.push($(this).find('#subLinkName').attr('value')); //$subLink.push($(this).find('#subLinkURL').attr('value')); //}); }else{ alert('hey'); $data = {linkName: $linkName, linkURL: $linkURL, linkID : $linkID, linkDescription : $linkInfo}; } //alert($data); $.ajax({ type: "POST", data: { method: "UpdateRegularLink", returnFormat:"json", formData: JSON.stringify($data) }, url: "../../WebServices/RMSI/rmsi.cfc", contentType: "application/json; charset=utf-8", dataType: "json", beforeSend: function() { alert('about to post'); }, error: function(data,status,error){ alert(data+': '+status+': '+error); }, done: function(data){ alert('success'); } }); }); 

Server Side / CFC:

 <cfcomponent> <cfset xmlpath = "e:\webapps\NRCNewsApps\RMSI\xml" /> <cffunction name="UpdateRegularLink" access="remote" output="false" > <cfargument name="formData" required="true" type="string" /> <cfset var cfStruct = DeserializeJSON(arguments.formData)> <!--- now I want to use the data ---> </cffunction> </cfcomponent> 

In Chrome I get "Unauthorized" In firebug I get an "unexpected character"

Just ask me and I will add the additional information that you need.

+6
source share
1 answer

Therefore, when you gate the data to be transferred to coldfusion, coldfusion does not understand this and adds all character types to your string, which makes it an unreadable coldfusion method.

I had to use toString () as an intermediate method call, since the JSON packet appears as an array of bytes (binary data), which must be returned back to the string before ColdFusion can parse it as a JSON value.

also a good call to @Chandan Kumar to add a method to the end of the URL instead of passing it with data. I actually kept flipping through this play, but in the end it was the way it worked, so KUDOS is for you

 var ajaxResponse = $.ajax({ type: "POST", url: "../../WebServices/RMSI/rmsi.cfc?method=UpdateRegularLinkmethod=, contentType: "application/json; charset=utf-8", data: JSON.stringify($data), //dataType: "json", beforeSend: function() { //alert($data); }, error: function(data,status,error){ alert(data+': '+status+': '+error); } }).done(function(entry) { alert('success'); }); ajaxResponse.then( function( apiResponse ){ // Dump HTML to page for debugging. $( "#response" ).html( apiResponse ); } ); 

CFC

 <cfcomponent> <cffunction name="UpdateRegularLink" access="remote" returntype="xml"> <cfset requestBody = toString( getHttpRequestData().content ) /> <!--- Double-check to make sure it a JSON value. ---> <cfif isJSON( requestBody )> <!--- Echo back POST data. ---> <cfdump var="#deserializeJSON( requestBody )#" label="HTTP Body" /> </cfif> </cffunction> </cfcomponent> 
+4
source

Source: https://habr.com/ru/post/955145/


All Articles