2012-05-09 16 views
2

私は、ユーザーがワードdocからテキストをコピーして貼り付けるフォームを持っています。このコンテンツにはタブ文字を含めることができます。 on-click関数は、ColdFusionリモート関数へのJSMX ajax呼び出しを使用してフォーム送信を処理します。フォームはajax呼び出しを介してコンポーネントに渡されます。タブ文字が原因でajax coldfusionコンポーネントが失敗する500 Internal Server Error

<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 This is text 
2 This is text 
3 This is text 

これは、機能に送信されるFirebugのエンコードされたテキストです。

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

ファイヤーバグを使用すると、機能に投稿されたコンテンツがエンコードされていることがわかります。タブは%9です。私はcfcをフォームの動作に置くことができ、関数は失敗しません。

私の回避策は、機能に送信する前にjavascriptを使用してタブを取り除くことです。しかし、なぜタブが500エラーを引き起こしているのか、これを防ぐためにできることがあれば理解したいと思います。

+0

非常に不思議です。私は自分自身でこれをテストすると思います。 –

+0

ファンクションコードを 'に変更するとどうなりますか? –

答えて

0

は、このコードを試してみてください。

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

私はエスケープ(f)しようとしました。 Firebugは、同じエンコードされた文字列が同じ500の内部サーバーエラーでコンポーネントに送信されていることを示しました。 – garyv

+0

奇妙な。そして、例えばf varの内容は何ですか? –

0

あなたが戻って渡す前に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> 
+0

正規表現は必要ありません。単にreplace(text、chr(9)、 "   "、 "all") 'が実行します。 (私はこれがここの問題に対処する正しい方法だとは思っていますが) –

+0

500内部サーバーエラーはCFソリューションを許可していません。このエラーは、CFコードを処理する前に発生します。私の回避策は、タブ文字を含むフォームコンテンツがサーバーに送信される前に、クライアントで発生する必要がありました。 – garyv

関連する問題