我的大多数 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
}