2013-10-02 1 views
6

У меня есть событие jquery submit, которое собирает данные формы и помещает его в объект jquery. Я хочу взять этот объект jquery и передать его веб-службе coldfusion, где я могу использовать его для обновления XML-файла. Я не хочу ответа от веб-службы, я просто хочу отправить ее в веб-службу и поиграть с данными оттуда.Передача данных в функцию CFC с помощью JSON через 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'); 
     } 
    }); 
}); 

стороны сервера/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> 

В Chrome я получаю "Несанкционированный" В поджигатель я получаю "неожиданный характер"

Просто спросите я и я добавлю дополнительную информацию, которая вам нужна.

+0

Ваш CFC вызывается или ошибка происходит перед вызовом AJAX? –

+1

IMO url предоставлен должен быть URL: «../../WebServices/RMSI/rmsi.cfc?method=UpdateRegularLink» и метод следует удалить из данных. Если URL-адрес заканчивается расширением CFC, проводник CFC запускает и возвращает HTML-код метаданных функции, которые могут вызывать эту проблему. –

+1

И может быть, cfcexplorer запрашивает авторизацию. вы можете проверить это, перейдя в инструмент разработчика> network, чтобы узнать, был ли вызван cfcexplorer. –

ответ

4

Поэтому, когда вы строгаете данные, которые должны быть переданы в coldfusion, coldfusion не понимает этого и добавляет все виды символов в вашу строку, что делает его нечитаемым методом coldfusion.

Необходимо использовать toString() в качестве вызова посреднического метода, поскольку пакет JSON встречается как массив байтов (двоичные данные), который должен быть возвращен обратно в строку, прежде чем ColdFusion сможет проанализировать его как значение JSON.

также хороший вызов @Chandan Kumar для добавления метода в конец URL вместо того, чтобы передавать его с данными. Я на самом деле продолжал листать на эту часть, но что в конечном счете был, как он работал так Престижность Вам

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> 
Смежные вопросы