【问题标题】:tab character causing ajax coldfusion component to fail, 500 Internal Server Error制表符导致 ajax Coldfusion 组件失败,500 内部服务器错误
【发布时间】:2012-05-09 21:58:11
【问题描述】:

我有一个表单,用户可以从 Word 文档中复制和粘贴文本。此内容可能包含制表符。 点击函数使用 JSMX ajax 调用 Coldfusion 远程函数来处理表单提交。表单通过 ajax 调用传递给组件。

<form name="test">
<textarea name="swPurpose"></textarea>
<input type="button" value=" Go " onclick="goForm(this.form);" />
</form>

function goForm(f){
var param=f; 
http('POST','testCFC.cfc?method=test',goForm_RTN,param);
}

<cfcomponent output="false">
<cffunction name="test" access="remote" output="false">
<cfset rtn=structNew()/>
<cfsavecontent variable="rtn.html">
<cfoutput><p>#form.swPurpose#</p></cfoutput>
</cfsavecontent>
<cfreturn rtn />
</cffunction>
</cfcomponent>

除非表单内容中有制表符,否则这非常有效。如果内容中有一个选项卡,我会收到 500 Internal Server Error。

这是表单中提交的示例文本。

1 这是文字 2 这是文字 3 这是文字

这是发布到函数的 Firebug 的编码文本。

swPurpose=1%9This%20is%20text%0a2%9This%20is%20text%0a3%9This%20is%20text&btn=%20OnClick%20,%20Submit%20

使用 Firebug,我可以看到发布到函数的内容已编码。制表符是 %9。我可以将 cfc 放入表单的操作中,并且该功能不会失败。

我的解决方法是在将标签发送到函数之前使用 javascript 去除标签。但是,我想了解为什么选项卡会导致 500 错误,以及是否可以采取任何措施来防止这种情况发生。

【问题讨论】:

  • 非常神秘。我想我会自己测试一下。
  • 把功能码改成&lt;cffunction name="test" access="remote" output="false"&gt;&lt;cfreturn StructNew() /&gt;&lt;/cffunction&gt;会怎样?

标签: ajax coldfusion cfc cffunction


【解决方案1】:

试试这个代码:

function goForm(f){
    var param = escape(f);//Or also encodeURI(f) or even encodeURIComponent(f)
    http('POST','testCFC.cfc?method=test',goForm_RTN,param);
}

【讨论】:

  • 我尝试了转义(f)。 Firebug 显示相同的编码字符串被发送到具有相同 500 内部服务器错误的组件。
  • 很奇怪。例如,f var 的内容是什么?
【解决方案2】:

您可以在返回之前用 CF 代码中的简单正则表达式替换选项卡。

<cfcomponent output="false">
    <cffunction name="test" access="remote" output="false">
        <cfargument name="form">
        <cfset var rtn=structNew()/>

        <cfsavecontent variable="rtn.html">
            <cfoutput><p>#ReReplace(form.swPurpose, "\t", "&nbsp;&nbsp;", "ALL")#</p></cfoutput>
        </cfsavecontent>
        <cfreturn rtn />
    </cffunction>
</cfcomponent>

【讨论】:

  • 不需要正则表达式,只需 replace(text,chr(9),"&amp;nbsp;&amp;nbsp;","all") 即可。 (虽然我怀疑这是处理这里问题的正确方法。)
  • 500 内部服务器错误不允许任何 CF 解决方案。该错误发生在任何 CF 代码可以被处理之前。在将带有制表符的表单内容发送到服务器之前,我的解决方法必须在客户端发生。
猜你喜欢
  • 2013-08-11
  • 2010-11-23
  • 1970-01-01
  • 2018-01-02
  • 2019-06-26
  • 2012-03-29
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多