0

我正在使用 railo 并尝试通过 ajax 提交 tinymce 文本区域。

我的问题是在提交时似乎 html 已被剥离并且 sql 实际上并未更新。

这是我的代码:

function UpdateHome() {
  document.getElementById('UpdateProcessing').style.display = '';
  document.getElementById('HomeForm').style.display = 'none';
  ColdFusion.Ajax.submitForm("HomeForm","action.cfm",HomeUpdateReturn);
  }

<form action="action.cfm" method="post" id="HomeForm">
 <input type="hidden" name="action" value="HomeUpdate" />
 <CFLOOP QUERY="FetchHome">
 <textarea id="HomeArea" name="HomeArea" class="tinymce" rows="20" cols="20"
 style="width:100%; height:500px" >#Body#</textarea>
 </CFLOOP>
 <input type="button" class="HomeSubmit" value="Save" onClick="UpdateHome();" /> 
</form>

<CFQUERY NAME="UpdateHome">
 UPDATE Content
 SET Body = '#HomeArea#'
 WHERE ID = 1
</CFQUERY>

<CFSET UdateHome     = ArrayNew(1)>
<CFSET UpdateHome[1]     = true>
<CFCONTENT TYPE="application/json" RESET="true">
<CFOUTPUT>#serializeJSON(UpdateHome)#</CFOUTPUT>

当我在没有 ajax 的情况下提交表单时,sql 工作正常。

有谁知道为什么这不会通过 ajax 提交 html 格式的文本?

4

2 回答 2

0

这里有几个问题:

  1. 我不相信您可以使用ColdFusion.Ajax.submitForm(),除非您使用 cfform 或除非您使用<cfajaximport ... />导入 javascript。您是否通过 Firebug 或 Chrome 开发工具确认 Javascript 没有引发错误?我怀疑是这样。<form ... >将您的and</form>标签更改为<cfform ...>and</cfform>并重试。

  2. 另外,我认为这不会像您期望的那样工作,因为您在同一个文件中同时拥有表单和表单处理程序逻辑。我会把它们分开。

  3. 您正在引用一个HomeUpdateReturn不存在的返回处理函数。您需要在 Javascript 代码中编写此函数。

您还有其他一些问题,我不能不指出就放过:

  1. 您应该确定变量的范围。在您的更新查询中,您有'#homearea#'. 这可以引用任何homearea变量,并且可能不是您期望的表单范围内的变量。将此更改为#form.homearea#. 这将确保仅使用表单范围内的变量。
  2. 需要在查询中使用<cfqueryparam ... />,否则您将面临 sql 注入攻击。所以更改'#homearea#'<cfqueryparam cfsqltype="cf_sql_longchar" value="#form.homearea#" />. (假设在您的数据库中您正在使用一个大文本字段)在不使用参数化查询的情况下,切勿允许未经检查的用户输入直接进入您的查询。
于 2012-07-02T19:51:12.253 回答
0

在提交表单之前,您需要做的就是调用 javascript 行

 tinymce.triggerSave()
于 2012-07-03T09:50:14.063 回答