Javascript 内的 CFML
CFML within Javascript
我正在处理别人编写的代码。据我所知,它不正确,但我没有看到任何错误,所以现在我不确定自版本 8 以来是否发生了某些变化。
代码如下 & 我想知道你是否可以将 CFML 与 Javascript 代码一起使用
<script language="JavaScript" type="text/JavaScript" >
var x = 2;
<cfif url.new = true>var x = 5 </cfif>
</script>
您不能在 JavaScript 中使用 CFML 本身,因为 ColdFusion 在服务器上运行,而 JavaScript 在客户端上运行。但是,您需要考虑 CFML 的工作原理,CFML 代码在服务器上 处理 ,然后将输出传递给客户端。因此,就您而言,您提供的示例是有效的。 CFML 将在服务器上进行处理,并生成两个输出之一并将其传回客户端。
注意:您没有包含所有代码,因此我假设在此之前还有其他代码检查 url.new
变量是否存在。否则,如果 new
参数未在 URL 中传递,则会抛出该变量不存在的错误。
如果 URL 不包含名为 "new" 的参数; http://www.yourdomain.com/somepage
或者 "new" 参数确实存在,但它的值不被认为是 "true"; http://www.yourdomain.com/somepage?new=false
那么输出将是:
<script language="JavaScript" type="text/JavaScript" >
var x = 2;
</script>
注意生成的JavaScript中"x"的值为2.
如果 URL 确实包含一个名为 "new" 的参数并且它的值被认为是 "true"; http://www.yourdomain.com/somepage?new=true
那么输出将是:
<script language="JavaScript" type="text/JavaScript" >
var x = 2;
var x = 5
</script>
请注意,生成的 JavaScript 中 "x" 的值将为 5,但是行尾也缺少一个分号,因此您的示例可能会抛出 JavaScript错误。
请注意,我还提到了 "if the value is considered to be true or false"。在ColdFusion中,布尔表达式、True、非零数和字符串"Yes"、"1|"、"True"是等价的;和 False、0 以及字符串 "No"、"0" 和 "False" 是等价的。布尔计算不区分大小写。例如,True、TRUE 和 true 是等价的。因此,在您的示例中,http://www.yourdomain.com/somepage?new=1 也将被视为 true。
好吧:您并没有真正按照您建议的方式使用 "CFML with Javascript code"。您拥有的是一些文本,而 CFML 恰好(有条件地)生成了一些其他文本。
它生成的文本将是以下之一:
<script language="JavaScript" type="text/JavaScript" >
var x = 2;
var x = 5
</script>
或
<script language="JavaScript" type="text/JavaScript" >
var x = 2;
</script>
取决于值 URL.new
。无论哪种方式,在 CFML 服务器对其进行任何输入时,它都只是文本。
然后该文本被发送回网络服务器,网络服务器将其发送回请求它的浏览器。浏览器然后将文本解释为 HTML,并且在 HTML 中是一些被告知将其视为 JavaScript 的文本。它确实如此(将其视为 JavaScript,并运行它)。
但这已经很久没有与 CFML 服务器有任何关系了。所有 CFML 服务器都会生成文本。
这可能有助于您理解 request/response 生命周期相对于 CFML 服务器:“The CFML request/response process”
我在这里的代码中发现了一些错误 - 这就是我想要的:
<script>
var x = 2;
<cfif structKeyExists(URL, "new") AND URL.new IS true>x = 5;</cfif>
</script>
我添加了一个检查以查看变量 'new' 是否存在于 URL 范围内 - 以防万一您没有在其他地方做过它。
如果您的 CFIF 语句在您应该使用 EQ 或 IS 时使用 =。我不知道为什么 CFIF 逻辑的语法与您可能真正期望的不同,而且我并不是 100% 完全了解 IS 和 EQ 之间的区别。
您已经声明了 VAR x=2,因此您不需要再次定义该变量 - 严格的 JavaScript 引擎可能会在此处抛出错误。已经定义好了,直接给它赋值即可。
如前所述,您在 CF 注入行的末尾缺少分号。
您应该呈现的代码是:
<script>
var x = 2;
x = 5;
</script>
除此之外,您尝试做的事情是有效的。我的工作中经常有一个 CF > JavaScript 'bridge' - 只要你明白一个是 运行 在编译时,在页面被传递到 web 服务器之前,另一个 运行s 在客户端计算机上 运行 时间。
我正在处理别人编写的代码。据我所知,它不正确,但我没有看到任何错误,所以现在我不确定自版本 8 以来是否发生了某些变化。
代码如下 & 我想知道你是否可以将 CFML 与 Javascript 代码一起使用
<script language="JavaScript" type="text/JavaScript" >
var x = 2;
<cfif url.new = true>var x = 5 </cfif>
</script>
您不能在 JavaScript 中使用 CFML 本身,因为 ColdFusion 在服务器上运行,而 JavaScript 在客户端上运行。但是,您需要考虑 CFML 的工作原理,CFML 代码在服务器上 处理 ,然后将输出传递给客户端。因此,就您而言,您提供的示例是有效的。 CFML 将在服务器上进行处理,并生成两个输出之一并将其传回客户端。
注意:您没有包含所有代码,因此我假设在此之前还有其他代码检查 url.new
变量是否存在。否则,如果 new
参数未在 URL 中传递,则会抛出该变量不存在的错误。
如果 URL 不包含名为 "new" 的参数; http://www.yourdomain.com/somepage
或者 "new" 参数确实存在,但它的值不被认为是 "true"; http://www.yourdomain.com/somepage?new=false
那么输出将是:
<script language="JavaScript" type="text/JavaScript" >
var x = 2;
</script>
注意生成的JavaScript中"x"的值为2.
如果 URL 确实包含一个名为 "new" 的参数并且它的值被认为是 "true"; http://www.yourdomain.com/somepage?new=true
那么输出将是:
<script language="JavaScript" type="text/JavaScript" >
var x = 2;
var x = 5
</script>
请注意,生成的 JavaScript 中 "x" 的值将为 5,但是行尾也缺少一个分号,因此您的示例可能会抛出 JavaScript错误。
请注意,我还提到了 "if the value is considered to be true or false"。在ColdFusion中,布尔表达式、True、非零数和字符串"Yes"、"1|"、"True"是等价的;和 False、0 以及字符串 "No"、"0" 和 "False" 是等价的。布尔计算不区分大小写。例如,True、TRUE 和 true 是等价的。因此,在您的示例中,http://www.yourdomain.com/somepage?new=1 也将被视为 true。
好吧:您并没有真正按照您建议的方式使用 "CFML with Javascript code"。您拥有的是一些文本,而 CFML 恰好(有条件地)生成了一些其他文本。
它生成的文本将是以下之一:
<script language="JavaScript" type="text/JavaScript" >
var x = 2;
var x = 5
</script>
或
<script language="JavaScript" type="text/JavaScript" >
var x = 2;
</script>
取决于值 URL.new
。无论哪种方式,在 CFML 服务器对其进行任何输入时,它都只是文本。
然后该文本被发送回网络服务器,网络服务器将其发送回请求它的浏览器。浏览器然后将文本解释为 HTML,并且在 HTML 中是一些被告知将其视为 JavaScript 的文本。它确实如此(将其视为 JavaScript,并运行它)。
但这已经很久没有与 CFML 服务器有任何关系了。所有 CFML 服务器都会生成文本。
这可能有助于您理解 request/response 生命周期相对于 CFML 服务器:“The CFML request/response process”
我在这里的代码中发现了一些错误 - 这就是我想要的:
<script>
var x = 2;
<cfif structKeyExists(URL, "new") AND URL.new IS true>x = 5;</cfif>
</script>
我添加了一个检查以查看变量 'new' 是否存在于 URL 范围内 - 以防万一您没有在其他地方做过它。
如果您的 CFIF 语句在您应该使用 EQ 或 IS 时使用 =。我不知道为什么 CFIF 逻辑的语法与您可能真正期望的不同,而且我并不是 100% 完全了解 IS 和 EQ 之间的区别。
您已经声明了 VAR x=2,因此您不需要再次定义该变量 - 严格的 JavaScript 引擎可能会在此处抛出错误。已经定义好了,直接给它赋值即可。
如前所述,您在 CF 注入行的末尾缺少分号。
您应该呈现的代码是:
<script>
var x = 2;
x = 5;
</script>
除此之外,您尝试做的事情是有效的。我的工作中经常有一个 CF > JavaScript 'bridge' - 只要你明白一个是 运行 在编译时,在页面被传递到 web 服务器之前,另一个 运行s 在客户端计算机上 运行 时间。