0

我试图通过后台任务执行一些 JS 代码。

我使用的网关与贝宝类似,即一旦获取付款详细信息,就会将响应发送回我服务器上的侦听器(这可能是立即的或几分钟后)

一旦侦听器 (listener.cfm) 收到响应,使用 cfhttp im 调用具有一些触发代码的文件 (runPixCode.cfm)。因为浏览器没有渲染 runPixCode.cfm,所以 JS 没有执行。

另外为了证明这是否有效,我让 JS 调用另一个文件(provethisis called.cfm),该文件将日志写入 txt 文件。

如果我在 cfhttp 调用之后直接输入以下内容,我可以在日志文件中看到一个条目。这向我保证,提供浏览器呈现的 JS 没有问题。

<cfoutput>#cfhttp.FileContent#</cfoutput><cfabort>

但是,不适用于后台任务。我不知道如何处理这个,任何建议表示赞赏。

监听器.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>

运行PixCode.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>

证明thisis called.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" >
4

1 回答 1

0

编写 iframe 是行不通的,javascript 也行不通,因为所有这些进程都是由应用程序调用的,而不是由浏览器调用的。

因此,您必须发挥创造力。首先,你真正想要做什么?

如果您的目的是确定文件是否已被调用或执行,请使用<cflog>或将条目写入数据库。

如果您尝试将 HTTP 调用从 listener.cfm 传递到 runPixCode.cfm,请使用<cfhttp>而不是 iframe。

如果您的目的实际上是执行 JavaScript 作为此自动化过程的一部分(不是,但这很酷),您可以通过 Rhino 在您的 CF/Java 服务器中执行 JavaScript,这不是非常简单,但是您可以获得代码谷歌搜索的片段。Rhino 包含在 ColdFusion 中js.jar,因此无需下载特殊文件即可使其工作。

于 2012-11-09T21:08:06.977 回答