多言語サイトを使用していて、クライアント側のフォーム検証のために、さまざまな言語のエラーメッセージをブラウザに渡す必要があります。
現在、私はerror.cfcを使用しています。これには次のものが含まれています。
<cfcomponent displayname="errorMsg" hint="create error msgs">
<cffunction name="createErrMsgsLog" output="false" returntype="string">
<cfset var allErrMsgs=ArrayNew(2)>
<cfquery datasource="db" name="texte" cachedWithin="#Session.globalCache#">
... query db for snippets and text blocks ...
</cfquery>
<cfoutput query="texte"><cfset "#trim(snippet)#" = "#trim(text)#"></cfoutput>
<cfscript>
allErrMsgs[1][1] = "comp";
allErrMsgs[1][2] = tx_validate_comp;
...
</cfscript>
<cfset Session.errMsgs = serializeJSON(allErrMsgs)>
<cfreturn Session.errMsgs>
</cffunction>
</cfcomponent>
だから私はすべてのテキストをつかんで、配列を埋めます。配列はシリアル化されて文字列として返されます。
cfcはapplication.cfc内で呼び出されます
<cffunction name="onSessionStart" returnType="boolean" output="false" hint="session initalizer">
...
<cfinvoke component="services.errorMsg" method="createErrMsgsLog" returnvariable="errMsgs"></cfinvoke>
<cfset Session.errMsgs = errMsgs>
...
</cffunction>
そして、すべてのページに次のように含めています。
<script type="text/javascript" language="JavaScript">var #toScript(Session.errMsgs, "errorLog")#</script>
errorLogが未定義になることがある理由はわかりませんが、ページを更新しているとき、またはアプリケーション内でページURLを手動で入力したとき(ページABCからページDEFに移動)に発生することがあります。
私はJqueryMobileを使用しているので、Sessionが開始されて最初のページが読み込まれると、errorLogが最初のページに1回レンダリングされます。後続のすべてのページがこのページにプルイン/削除されるため、最初のerrorLogは常にアクティブです。URLを手動で変更すると、新しいページを読み込んでいるため、最初のページのerrorLogが失われていると思いますが、新しいページが「独自の」errorLogを取得しない理由、またはすべてが未定義である理由がわかりません。突然の。
質問:
errorLogが定義されていることを確認する方法=ColdfusionでerrorMessagesが作成されることを確認するにはどうすればよいですか?
手伝ってくれてありがとう!
編集: わかりました。Coldfusionにチェックを追加したので、Session変数が定義されていない場合は、それを再作成しています。しかし、これまでのところ、それは常にそこにあります。URLを手動で変更して別のページに移動した場合にのみ発生するようです。IE8で再現できます。不思議なことに、IE8デバッガーをチェックすると、errorLogがありますが、それでも未定義であるというエラーが表示されます...
編集:
cfinvokeをapplication.cfc内のonrequestハンドラーに移動しました。
<cfif len( Session.errMsgs ) EQ 0>
<cfinvoke component="services.errorMsg" method="createErrMsgsLog" returnvariable="errMsgs"></cfinvoke>
<cfset Session.errMsgs = errMsgs>
</cfif>
アプリケーションが起動したときにifステートメント内に収まるだけなので、Coldfusionの部分は正しく機能しているようです。その後、errMsgsが定義されますが、問題は残ります...イライラします。
編集:
別の原因は私のJSON文字列である可能性があります。私はそれを次のように設定しています:
<script type="text/javascript">var #toScript(Session.errMsgs, "errorLog")#; alert(errorLog);</script>
アラートは大丈夫ですが、後でそのように取得しようとすると、次のようになります。
err = jQuery.parseJSON(errorLog);
NULLを取得しています。私のJSONは次のようになります(有効で、Session.errMsgsに警告します)
[["firma","Bitte Firmennamen eingeben!"],["firma_re","Bitte Firmennamen eingeben!"],...
またはこれ(無効、toScriptで出力):
"[[\"firma\",\"Bitte Firmennamen eingeben!\"],[\"firma_re\",\.... (invalid)