2013-10-02 18 views
6

Tôi có một sự kiện gửi jquery thu thập dữ liệu biểu mẫu và đặt nó vào một đối tượng jquery. Tôi muốn lấy đối tượng jquery đó và chuyển nó đến một dịch vụ web coldfusion, nơi tôi có thể sử dụng nó để cập nhật một tệp xml. Tôi không muốn một phản ứng từ dịch vụ web tôi chỉ muốn gửi nó đến các dịch vụ web và fiddle với các dữ liệu từ đó.Chuyển dữ liệu đến hàm CFC với JSON qua AJAX Bài đăng

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> 

Trong Chrome tôi nhận được "trái phép" Trong firebug tôi nhận được "nhân vật bất ngờ"

Chỉ cần hỏi tôi và tôi sẽ bổ sung thêm thông tin mà bạn cần.

+0

là CFC của bạn được gọi là hay được các lỗi xảy ra trước khi cuộc gọi ajax? –

+1

Url IMO được cung cấp phải là url: "../../WebServices/RMSI/rmsi.cfc?method=UpdateRegularLink" và phương pháp nên được xóa khỏi dữ liệu. Nếu URL kết thúc bằng phần mở rộng CFC, trình khám phá CFC sẽ khởi động và trả về một HTML của siêu dữ liệu chức năng có thể gây ra sự cố này –

+1

Và có thể cfcexplorer đang yêu cầu ủy quyền. bạn có thể kiểm tra điều này bằng cách truy cập công cụ nhà phát triển> mạng để xem cfcexplorer đã được gọi hay chưa. –

Trả lời

4

Vì vậy, khi bạn xâu chuỗi dữ liệu được truyền sang coldfusion, coldfusion không hiểu nó và thêm tất cả các loại ký tự vào chuỗi của bạn làm cho nó không thể đọc được bởi coldfusion.

Phải sử dụng toString() làm cuộc gọi phương thức trung gian vì gói JSON đi qua dưới dạng mảng byte (dữ liệu nhị phân) cần được chuyển trở lại thành chuỗi trước khi ColdFusion có thể phân tích cú pháp dưới dạng giá trị JSON.

cũng gọi điện tốt @Chandan Kumar để thêm phương thức vào cuối url thay vì chuyển nó vào với dữ liệu. Tôi thực sự giữ lật trên mảnh đó nhưng mà cuối cùng là làm thế nào nó làm việc rất Kudos cho bạn

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

         } 
        ); 

THE 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> 
Các vấn đề liên quan