![](/img/trans.png)
[英]Post form data to Fw/1(Coldfusion) controller function using AJAX
[英]Invoke ColdFusion function using AJAX
當用戶單擊鏈接時,我需要調用ColdFusion函數(存在於.cfm文件中)。 我想使用jQuery。 我有一個jQuery片段,看起來像-
<script type="text/javascript">
$(document).ready(function(){
$("td.ViewLink a").click(function(event){
event.preventDefault();
)}
我對jQuery和AJAX都不陌生,所以在這里聽起來我很幼稚。 我應該使用AJAX調用ColdFusion函數嗎? 類似於請求在服務器上執行特定功能。
在這方面的任何幫助表示贊賞。
干杯。
如果您的cfm中有多個功能(即使您沒有),也可以將它們放在cfc中。 然后,您可以使用以下url模式調用特定方法。
cfc名為myEntityWS.cfc
<cfcomponent>
<cffunction name="updateDescription" access="remote" returntype="string">
<cfargument name="value" type="string" required="yes">
<cftry>
your code here
<cfcatch>
<cfoutput>
#cfcatch.Detail#<br />
#cfcatch.Message#<br />
#cfcatch.tagcontext[1].line#:#cfcatch.tagcontext[1].template#
</cfoutput>
</cfcatch>
</cftry>
</cffunction>
</cfcomponent>
Java腳本
$.get('myEntityWS.cfc?method=updateDescription&value=someValue');
您無法完全執行示例代碼中要執行的操作。 不過,您還有一些選擇。
方法1:遠程訪問對象
將您的功能移動到CFC中,然后通過CFC的URL訪問它們。 此訪問方法要求該函數使用權限屬性access='remote'
如果設置為public(默認值)或private(或包或任何角色級別等),則將得到方法未找到錯誤嘗試遠程訪問時。
為此,您正在創建一個SOAP Web服務並通過AJAX使用它。 您可以通過在jQuery請求中使用以下格式來執行此操作:
http://domain.com/path/to/your.cfc?method=functionName&argument1=arg1Val&foo=bar&...
如果您具有ColdFusion 8,則還可以指定returnFormat='format'
參數,該參數會將您返回的所有本機ColdFusion數據對象即時轉換為請求的格式。 它支持JSON,XML和WDDX。
foo.cfc
<cfcomponent output="false">
<cffunction name="foobar" output="false" access="remote" hint="...">
<cfargument name="arg1" type="string" required="true" />
...
<cfreturn someVar />
</cffunction>
</cfcomponent>
通過URL訪問:
http://domain.com/path/to/foo.cfc?method=foobar&arg1=some%20value&returnFormat=JSON
方法2:遠程代理對象
方法#1的不利方面是,實例化CFC的效率會受到輕微影響,因此,如果這種特定的AJAX方法將非常頻繁地運行,並且/或者您的CFC包含的方法不止幾種,或者長度超過數百行,您不想為每個請求一遍又一遍地實例化它。 相反,您需要查看遠程代理模式 ,在其中緩存在應用程序范圍內實現功能的CFC,並擁有一個重量輕得多的單獨的“遠程代理” CFC,因此可以充當代理 (因此名稱))之間的http請求和緩存的CFC。
在這種模式下,您的業務對象(具有實際功能的對象)可以具有access=public
(或包等),只要代理可以訪問它即可。 但是,代理本身必須具有access=remote
。
proxy.cfc
<cfcomponent output="false">
<cffunction name="foobar" output="false" access="remote" hint="...">
<cfargument name="arg1" type="string" required="true" />
<!--- Application.foo is an instantiated object of foo.cfc --->
<cfreturn Application.foo.foobar(argumentCollection=arguments) />
</cffunction>
</cfcomponent>
通過URL訪問:
http://domain.com/path/to/proxy.cfc?method=foobar&arg1=some%20value&returnFormat=JSON
方法3:自己動手
最后,您可以手動實現函數調用並返回CFM模板。 此方法不涉及編寫CFC帶來的(輕微)性能下降,但會為您帶來更多輸入和其他潛在故障點。 為此,請將您的函數包括在CFM模板中,並將輸出流視為該流:將返回到瀏覽器的文本流。
您應該小心管理返回值中的空格(在函數定義上使用output=false
,考慮使用<cfsetting enableCFOutputOnly='true'
,並且僅注意整體間距)。 如果您的jQuery請求要求返回JSON,則需要對其進行序列化。 (如果需要在ColdFusion 6或7 上將數據序列化為JSON,建議使用JSONUtil )
使用這種方法,您可以將AJAX請求指向帶有URL參數的.cfm文件,然后需要編寫將這些url參數傳遞給函數的代碼,然后顯示(基本上,返回到AJAX請求)函數的結果。
foo.cfm
<cfsetting enableCFOutputOnly="true">
<cfparam name="arg1" default="defaultVal"/>
<cffunction name="foobar" output="false" access="remote" hint="...">
<cfargument name="arg1" type="string" required="true" />
...
<cfreturn someVar />
</cffunction>
<cfset variables.result = foobar(url.arg1) />
<cfoutput>#serializeJSON(variables.result)#</cfoutput>
剛看到這篇文章。 我正在使用cfc和jquery ajax顯示一堆計算值。 我的cfc具有以下內容:
<cfcomponent output="true">
<cfscript>
this.init();
</cfscript>
<cffunction name="init" access="public" returntype="any">
<cfset variables.dsn = application.dsn>
<cfreturn variables.dsn>
</cffunction>
<cffunction name="getFinanceTerms" access="remote" output="true" returntype="void">
<cfargument name="sales_price" type="numeric" required="yes">
<cfargument name="interestRate" type="numeric" required="yes">
<!--- some calculations here --->
#arguments.salesPrice# <!--- just to have something displayed --->
<cfreturn>
</cffunction>
</cfcomponent>
我使用JQuery.ajax:
$.ajax({
type:"POST",
url:"financeTerms.cfc?method=getFinanceTerms",
data: "sales_price=55000&interestRate=5.99",
cache:false,
success: function(msg) {
$("#someDiv").html(msg);
}
});
也許,這對其他人很有用...
您不一定需要使用“ AJAX”(特別是XML部分),但是您可以使用遠程服務器調用:
$.get('/execute-function.cfm?func=whatever', function (result) { $('#result').html(result); });
真正取決於結果需要做什么。 上面的代碼會將HTML結果放置在頁面上的div中:
<div id="result"></div>
您可以使用異步調用並解析XML,但是我發現我幾乎不需要。
如果願意,可以嘗試在CF8中使用<cfajaxproxy>
標記。
在JavaScript中使用ColdFusion變量功能強大! 請務必使用
<cfoutput> var #toScript(ColdFusionVAR, 'javascriptVar')# </cfoutput>
您現在可以使用CFAJAXPROXY將變量引用為javaScriptVar
確保將其包含在模板中
<head>
<cfajaxproxy cfc="cfc.yourclassname" jsclassname="jsCFCclassName">
</head>
在JavaScript端使用您的類。
你會這樣的。
var JS_CFC_Obj;
JS_CFC_Obj = new jsCFCclassName()
現在,您可以調用該cfc內部的函數。
jsCFCclassName.functionName(javascript var);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.