我试图通过后台任务执行一些JS代码。
我正在使用类似于paypal的网关,即一旦收到付款详细信息,就会将响应发送回我服务器上的监听器(这可能是立即或几分钟后)
一旦侦听器(listener.cfm)收到响应,使用cfhttp im调用一个具有一些触发器代码的文件(runPixCode.cfm)。 因为浏览器不呈现runPixCode.cfm,所以JS没有执行。
另外为了证明这是否有效,我让JS调用另一个文件(provethisiscalled.cfm)将日志写入txt文件。
如果我在cfhttp调用之后直接输入以下内容,我可以在日志文件中看到一个条目。这确保了JS提供浏览器呈现的文件没有问题。
<cfoutput>#cfhttp.FileContent#</cfoutput><cfabort>
但是,不能使用后台任务。我不知道如何应对这一点,任何建议表示赞赏。
listener.cfm
--Does a bunch of logic--
<cfif paymentsuccessful>
<CFHTTP URL="www.mysite.com/runPixCode.cfm" METHOD="post" timeout="12" resolveurl="true">
<CFHTTPPARAM NAME="TrackingId" VALUE="#trackingId#" TYPE="FormField">
</CFHTTP>
</cfif>
runPixCode.cfm
<SCRIPT language="JavaScript">
var axel = Math.random()+"";
var a = axel * 1000;
document.write('<IFRAME SRC="http://www.mysite.com/provethisiscalled.cfm?codearea=landing&num='+ a + '?" WIDTH=1 HEIGHT=1 FRAMEBORDER=0></IFRAME>');
</SCRIPT>
<NOSCRIPT><IFRAME SRC="http://www.mysite.com/provethisiscalled.cfm?codearea=landing&num=1" WIDTH=1 HEIGHT=1 FRAMEBORDER=0></IFRAME> </NOSCRIPT>
provethisiscalled.cfm
<cfloop collection=#ARGUMENTS.triggerParams# item="key">
<cfset docLogging = docLogging & chr(13) & "#key# = " & ARGUMENTS.triggerParams[key]>
</cfloop>
<cffile action="append" file="c:\serverlocation\someDir\triggerlog.txt" output="#docLogging#" addnewline="YES" >
答案 0 :(得分:0)
编写iframe不起作用,也不是javascript,因为所有这些进程都是由应用程序调用的,而不是由浏览器调用的。
因此,你必须发挥创意。首先,你真的想做什么?
如果您的目的是确定是否已调用或执行文件,请使用<cflog>
或将条目写入数据库。
如果您尝试将listener.cfm中的HTTP调用传递给runPixCode.cfm,请使用<cfhttp>
而不是iframe。
如果您的目的实际上是作为此自动化过程的一部分执行JavaScript(它不是,但这很酷),您可以通过Rhino在CF / Java服务器中执行JavaScript,这不是非常简单,但是你可以通过谷歌搜索获得代码片段。 Rhino作为js.jar
包含在ColdFusion中,因此没有特殊文件可供下载以使其正常工作。