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 は正常に動作します。

これがhtml形式のテキストをajax経由で送信しない理由を誰かが知っていますか?

4

2 に答える 2

0

ここでいくつかの問題:

  1. cfform を使用していないか、javascript をインポートしていColdFusion.Ajax.submitForm()ない限り、使用できるとは思いません。<cfajaximport ... />Javascript がエラーをスローしていないことを Firebug または Chrome 開発ツールで確認しましたか? そうだと思います。<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 に答える