2013-10-02 44 views
6

我有一個收集表單數據並將其放入jquery對象的jQuery提交事件。我想把這個jquery對象傳遞給一個coldfusion Web服務,我可以用它來更新一個xml文件。我不希望來自Web服務的響應,我只是想將它發送到Web服務,並從那裏弄到數據。通過AJAX將數據傳遞給帶有JSON的CFC函數Post

客戶端/ 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中我得到 「未授權」 在Firebug我得到 「意外的字符」

問問我和我會添加你需要的更多信息。

+0

是您的CFC被稱爲或Ajax調用之前發生的錯誤? –

+1

提供的IMO網址應該是url:「../../WebServices/RMSI/rmsi.cfc?method=UpdateRegularLink」和方法應該從數據中刪除。 如果URL以CFC擴展名結尾,則CFC瀏覽器會啓動並返回可能導致此問題的功能元數據的HTML –

+1

而且可能是cfcexplorer正在請求授權。您可以通過轉到開發人員工具>網絡來查看是否調用了cfcexplorer。 –

回答

4

因此,當您將要傳遞給coldfusion的數據串聯起來時,coldfusion不會理解它,並將所有類型的字符添加到您的字符串中,使其無法通過coldfusion讀取。

不得不使用toString()作爲中間方法調用,因爲JSON包作爲一個字節數組(二進制數據)出現,需要在ColdFusion將其解析爲JSON值之前轉換回字符串。

也很好的電話@Chandan庫馬爾將該方法添加到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); 

         } 
        ); 

氟氯化碳

<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> 
相關問題