2014-05-20 63 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上提出的问题的答案。