2013-10-02 6 views
6

Ich habe ein jquery senden-Ereignis, das Formulardaten sammelt und es in ein jquery-Objekt einfügt. Ich möchte dieses jquery-Objekt nehmen und es an einen Coldfusion-Webdienst übergeben, wo ich es verwenden kann, um eine XML-Datei zu aktualisieren. Ich möchte keine Antwort vom Web-Service, ich möchte es nur an den Web-Service senden und mit den Daten von dort fummeln.Übergeben Sie Daten an CFC-Funktion mit JSON über AJAX Post

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 erhalte ich "Unauthorized" In firebug I "unerwartetes Zeichen"

Nur fragen Sie ich und ich werde mehr Informationen hinzufügen, die Sie brauchen.

+0

Ist Ihr cfc aufgerufen wird oder der Fehler geschieht vor dem Ajax-Aufruf? –

+1

IMO-URL zur Verfügung gestellt werden sollte URL: "../../WebServices/RMSI/rmsi.cfc?method=UpdateRegularLink" und Methode sollte aus Daten entfernt werden. Wenn die URL mit der CFC-Erweiterung endet, wird der CFC-Explorer gestartet und gibt einen HTML-Code der Funktionsmetadaten zurück, die möglicherweise dieses Problem verursachen. –

+1

Und möglicherweise fordert cfcexplorer eine Autorisierung an. Sie können dies überprüfen, indem Sie im Developer Tool> Netzwerk nachsehen, ob cfcexplorer aufgerufen wurde. –

Antwort

4

Wenn Sie also die Daten an Coldfusion übergeben, versteht Coldfusion sie nicht und fügt Ihrer Zeichenfolge alle möglichen Zeichen hinzu, so dass Coldfusion sie nicht mehr lesen kann.

Hatte toString() als intermediären Methodenaufruf zu verwenden, da das JSON-Paket als Bytearray (Binärdaten) auftritt, das in eine Zeichenfolge umgewandelt werden muss, bevor ColdFusion es als JSON-Wert analysieren kann.

auch gut @Chandan Kumar anrufen, um die Methode am Ende der URL hinzuzufügen, anstatt sie mit den Daten zu übergeben. Ich hielt tatsächlich auf diesem Stück Spiegeln aber, dass letztlich wurde, wie es funktioniert so ein dickes Lob an Dich

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); 

         } 
        ); 

DIE CFC

<cfcomponent> 
    <cffunction name="UpdateRegularLink" access="remote" returntype="xml"> 

    <cfset requestBody = toString(getHttpRequestData().content) /> 

    <!--- Double-check to make sure it's a JSON value. ---> 
    <cfif isJSON(requestBody)> 

     <!--- Echo back POST data. ---> 
     <cfdump 
      var="#deserializeJSON(requestBody)#" 
      label="HTTP Body" 
     /> 

    </cfif> 


    </cffunction> 
</cfcomponent>