我在Coldfusion8中有一個組件,它構造了一個錯誤消息的日誌並將它傳遞給JSON中的一個變量,以供Jquery使用。如何在Coldfusion中僅調用一次cf函數和用戶觸發器?
當用戶更改語言(重新加載頁面)一樣,所以我重建這個組件:
HTML:
<a href="index.cfm?lang=EN">change to english</a>
在我檢查郎重裝和如果指定在ColdFusion中運行:
<cfif isdefined("lang")>
<cfset Session.lang= #lang#>
<!--- rebuild error messages --->
<cfinvoke component="services.errorMsg"
method="createErrMsgsLog"
returnvariable="errMsgs">
</cfinvoke>
<cfoutput><script type="text/javascript">var errorLog = '<cfoutput>#errMsgs#</cfoutput>';</script></cfoutput>
</cfif>
Question1: 有沒有更好的方法來做到這一點?從我的小Coldfusion exp,CFINVOKE創建並丟棄對象,所以這應該是資源友好。
Question2:
如何在應用程序/會話啓動時運行此操作?我嘗試從我的application.cfc onSessionStart運行它,但我無法從那裏觸發任何Javascript警報/控制檯,所以我恐怕沒有任何反應......還有一種更好的方法,比如將application.cfc與函數這個。
感謝您的一些見解!
編輯:
中途有:當我改變語言,我可以觸發此:
<cfif isdefined("Sprachwechsel")>
<cfset Session.Sprache = #Sprachwechsel#>
<cfinvoke component="services.errorMsg" method="createErrMsgsLog" returnvariable="Session.errMsgs">
</cfinvoke>
<cfoutput>
<script type="text/javascript">var errorLog = '<cfoutput>#Session.errMsgs#</cfoutput>'</script>
</cfoutput>
不過我也想從曾經的Application.cfc觸發此。我可以使用相同的代碼或下面的代碼。什麼都沒發生。
<cffunction name="onApplicationStart" returnType="boolean" output="false">
<cfscript>
APPLICATION.strObjs = structNew();
APPLICATION.strObjs.objErrMsg = createObject("component","services.errorMsg");
</cfscript>
<cfreturn true />
</cffunction>
<cffunction name="onSessionStart" returnType="void" output="false">
<cfscript>
Session.sprache = "DE";
Session.errMsgs = APPLICATION.strObjs.objErrMsg.createErrMsgsLog();
</cfscript>
<cfreturn true />
</cffunction>
我已經試過一個極大的變化,但Session.errMsgs如果我檢查它實際的頁面上只是停留不確定的。任何想法我失蹤?
EDIT2:
好的。我通過here發現問題。當我更改我的應用程序名稱時,我發現什麼不起作用,修復此問題後,onSessionStart按預期啓動。相當多的...
不要忘記var範圍和驗證變量。根據你的代碼,我可以很容易地將任何東西注入會話變量。 –
hm。你知道一個好的鏈接讓我開始? – frequent