2014-05-20 70 views
1

我的大部分AJAX調用都與jQuery中的daya屬性一起使用,以傳遞奇異值。但有時我需要將JSON中的結構傳遞給服務器以供進一步處理。我知道如何,我知道它的工作原理。但它似乎只有90%的時間工作。coldfusion ajax json - 空請求主體

安裝程序是Railo 4.2和IIS,它們的大多數設置仍然是默認設置。我也無法在本地重現這一點,我有Coldfusion服務器而不是Railo。 我也在Coldbox框架中工作。

發送JSON數據jQuery的代碼如下:

var oJSON = {'param1': param1, 'param2': param2, 'param3': param3}; 
$.ajax({ 
     type: "POST", 
     url: uAjax + "?action=someurlparameter", 
     data: JSON.stringify(oJson), 
     contentType: "application/json; charset=utf-8", 
     datatype: "json", 
     success: function(oData) 
     { 
      // do something 
     } 
    }); 

ColdFusion的CFC來處理輸入數據進行以下操作:

<cffunction name="cashup" returntype="struct" output="false" hint="handle json data"> 
    <cfargument name="event"> 
    <cfargument name="rc"> 
    <cfargument name="prc"> 

    <!--- get json data ---> 
    <cfset LOCAL.oJson = deserializeJSON(toString(getHttpRequestData().content)) /> 
    <cfreturn someService.someProcessing(LOCAL.oJson) /> 
</cffunction> 

這看起來非常簡單的代碼給我。但由於某些原因,這些調用失敗的原因有10%,因爲請求主體爲空。我不知道爲什麼。它不能是正在發送的數據,因爲再次單擊按鈕而不刷新頁面,從而重試ajax調用,大部分時間都會產生一個良好的調用,這是通過WITH請求主體實現的。

編輯1:

以JSON樣本數據:

"MoneyLocation": { 
     "MoneyLocationPaymentTypeCountList": [ 
     { 
     "Amount": 175.28, 
     "Description": "CASH ", 
     "IdPaymentType": 2, 
     "ImageLocation": "" 
     }, 
     { 
     "Amount": 0, 
     "Description": "Generieke bon ", 
     "IdPaymentType": 62, 
     "ImageLocation": "" 
     } 
    ], 
    "IdTill": -1, 
    "IdMoneyLocation": 35 
    } 
+0

似乎不太可能是這個問題,因爲它是一個遠程請求,因此CFC實例應該是暫時的,但是你有一個un-'VAR'變量'oJson'。我至少會把它解決掉。 –

+0

你的網絡選項卡告訴你10%的時間(當它發送一個空的內容時) –

+0

@KevinB:網絡選項卡告訴我數據正在以正確的方式發送到請求中的服務器。 Javascript發送一個正確的JSON對象,但getHttpRequestData()。的內容是完全空的。 – dreagan

回答

0

與上Railo谷歌集團其他幾個人的工作,我們已經發現,在請求某個請求身體得到失去了時間和空間。有時。並且非常隨機。我不再是唯一遇到過這個問題的人,並且我們已經確定最初請求主體充滿了期望值。

通過在您的Application.cfc加入以下代碼到你onRequestStart()方法,你可以再次確認值的您的要求的身體期待:

request._body = ToString(GetHttpRequestData().content); 

這絕不是一個永久的解。它不再構成對Coldfusion應用程序完整性的威脅,但仍然存在一些背後的問題。如果我們知道發生了什麼,我會確保更新這個答案。

我也不想爲這個旁路承擔功勞,我沒有發現我自己。 Railo Google Group的優秀人士指出了我的正確方向。但我希望能夠提供一個在stackoverflow上提出的問題的答案。