【问题标题】:coldfusion ajax json - empty request bodyColdfusion ajax json - 空请求正文
【发布时间】:2014-07-18 15:38:11
【问题描述】:

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

【问题讨论】:

  • 似乎不太可能是问题,因为它是一个远程请求,因此 CFC 实例应该是暂时的,但你有一个 un-VAR-ed 变量 oJson 那里。我至少会解决这个问题。
  • 您的网络标签在 10% 的情况下会告诉您什么(当它发送空内容时)
  • @KevinB:网络选项卡告诉我数据正在以 JSON 格式正确发送到请求中的服务器。 Javascript 发送一个正确的 JSON 对象,但 getHttpRequestData().content 的 cfdump 完全为空。
  • @AdamCameron:在编写示例时忘记了范围。
  • 如果您能分享可重现的代码和数据,我们将为您提供帮助。

标签: ajax json coldfusion railo coldbox


【解决方案1】:

与 Railo Google Group 中的其他几个人一起工作时,我们发现在请求期间的某个地方,请求正文会在时间和空间上丢失。有时。并且非常随机。我不再是唯一遇到此问题的人,我们发现最初请求正文中填充了预期值。

通过将以下代码添加到 application.cfc 中的 onRequestStart() 方法,您可以再次确定请求正文中的值:

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

这绝不是一个永久的解决方案。它不再对 Coldfusion 应用程序的完整性构成威胁,但是这一切背后仍然存在一些问题。如果我们知道发生了什么,我会确保更新这个答案。

我也不想因为这个绕过而受到赞扬,我自己还没有发现这一点。 Railo Google Group 的好人为我指明了正确的方向。但我也希望能够为 stackoverflow 上提出的问题提供答案。

【讨论】:

    猜你喜欢
    • 2014-05-06
    • 2015-11-12
    • 2018-11-28
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多