2013-10-02 14 views
6

Mam zdarzenie przesyłania jquery, które zbiera dane formularza i umieszcza je w obiekcie jQuery. Chcę wziąć obiekt jquery i przekazać go do usługi sieciowej coldfusion, w której mogę go użyć do aktualizacji pliku xml. Nie chcę odpowiedzi od usługi internetowej, którą chcę tylko wysłać do serwisu internetowego i przetrząsać dane z tego miejsca.Przekazywanie danych do funkcji CFC za pomocą JSON za pośrednictwem 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> 

W Chrome mam "nieuprawniony" w Firebug dostać "nieoczekiwany znak"

Wystarczy zapytać ja i ja dodamy więcej informacji, których potrzebujesz.

+0

Czy Twój CFC miano albo jest błąd dzieje przed wywołania AJAX? –

+1

Podany adres IMO powinien być adresem URL: "../../WebServices/RMSI/rmsi.cfc?method=UpdateRegularLink" i metoda powinna zostać usunięta z danych. Jeśli adres URL kończy się rozszerzeniem CFC, eksplorator CFC kopie i zwraca kod HTML metadanych funkcji, które mogą być przyczyną tego problemu. –

+1

A może cfcexplorer prosi o autoryzację. możesz to sprawdzić, przechodząc do narzędzia programisty> sieć, aby sprawdzić, czy wywołano cfcexplorer. –

Odpowiedz

4

Tak więc, gdy sznurujesz dane, które mają być przekazane do coldfusion, coldfusion go nie rozumie i dodaje do struny wszystkie rodzaje znaków, przez co staje się nieczytelne przez coldfusion.

Musiał użyć toString() jako pośredniego wywołania metody, ponieważ pakiet JSON jest traktowany jako tablica bajtów (dane binarne), która musi zostać przekierowana z powrotem do ciągu, zanim ColdFusion może przeanalizować go jako wartość JSON.

również dobry telefon @Chandan Kumar do dodania metody do końca adresu URL zamiast podawania go do danych. I faktycznie przechowywane przerzucanie na ten kawałek, ale to w końcu było to, jak to działało tak Kudos do Ciebie

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's a JSON value. ---> 
    <cfif isJSON(requestBody)> 

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

    </cfif> 


    </cffunction> 
</cfcomponent> 
Powiązane problemy