我的大多数AJAX调用只是使用jQuery中的daya属性来传递奇异值。但有时我需要将JSON中的结构传递给服务器以进行进一步处理。我知道怎么做,我知道它有效。但它似乎只占90%的时间。
设置是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调用,大多数情况下会导致一个良好的调用,通过一个填充的请求主体。
编辑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 :(得分:0)
与Railo Google Group上的其他几个人一起工作,我们发现在请求期间的某个地方,请求主体在时间和空间上迷失了方向。有时。并且非常随意。我不再是唯一经历过这个问题的人,而且我们已经知道最初请求主体已经填满了预期的价值。
通过在application.cfc中将以下代码添加到onRequestStart()方法,您可以再次确定请求正文中的值:
request._body = ToString( GetHttpRequestData().content );
这绝不是永久的解决方案。它不再对冷冻应用的完整性构成威胁,但仍然存在一些问题。如果我们发现了正在发生的事情,我们一定要更新这个答案。
我也不想因为这次绕行而受到赞誉,我自己也没有发现这一点。 Railo Google Group的优秀人员指出了我正确的方向。但我希望能够回答stackoverflow上提出的问题。