Javascript中的CFML

Javascript中的CFML,javascript,coldfusion,cfml,Javascript,Coldfusion,Cfml,我正在编写其他人编写的代码。据我所知,这是不正确的,但我没有看到任何错误,所以现在我不确定是否有什么改变,因为版本8 代码如下&我想知道是否可以将CFML与Javascript代码一起使用 <script language="JavaScript" type="text/JavaScript" > var x = 2; <cfif url.new = true>var x = 5 </cfif> </script> var x

我正在编写其他人编写的代码。据我所知,这是不正确的,但我没有看到任何错误,所以现在我不确定是否有什么改变,因为版本8

代码如下&我想知道是否可以将CFML与Javascript代码一起使用

<script language="JavaScript" type="text/JavaScript" > 
    var x = 2;
    <cfif url.new = true>var x = 5 </cfif>
</script>

var x=2;
变量x=5

不能在JavaScript本身中使用CFML,因为ColdFusion在服务器上运行,JavaScript在客户端运行。但是,您需要考虑CFML如何工作,CFML代码在服务器上进行处理,然后将输出传递给客户端。因此,在您的案例中,您提供的示例是有效的。CFML将在服务器上进行处理,并生成两个输出中的一个,并将其传递回客户端

注意:您尚未包含所有代码,因此我假设在此之前还有其他代码检查
url.new
变量的存在。否则,如果未在URL中传递
new
参数,则会抛出一个错误,说明变量不存在

如果URL不包含名为“new”的参数
或者“new”参数确实存在,但其值不被视为“true”
那么输出将是:

<script language="JavaScript" type="text/JavaScript" > 
    var x = 2;
</script>
<script language="JavaScript" type="text/JavaScript" > 
    var x = 2;
    var x = 5 
</script>

var x=2;
请注意,生成的JavaScript中的“x”值将为2

如果URL确实包含名为“new”的参数,并且其值被视为“true”
那么输出将是:

<script language="JavaScript" type="text/JavaScript" > 
    var x = 2;
</script>
<script language="JavaScript" type="text/JavaScript" > 
    var x = 2;
    var x = 5 
</script>

var x=2;
变量x=5
请注意,生成的JavaScript中的“x”值将为5,但是在该行的末尾还缺少分号,因此您的示例可能会抛出JavaScript错误


请注意,我还提到“如果该值被认为是真的或假的”。在ColdFusion中,布尔表达式、True、非零数和字符串“Yes”、“1 |”、“True”是等价的;和False、0,字符串“No”、“0”和“False”是等价的。布尔求值不区分大小写。例如,True、True和True是等效的。因此,在您的示例中,这也被认为是正确的。

好吧:您并没有按照您建议的方式真正使用“CFML with Javascript代码”。您拥有的是一些文本,而CFML恰好(有条件地)生成了一些其他文本

它生成的文本将是以下内容之一:

<script language="JavaScript" type="text/JavaScript" > 
    var x = 2;
    var x = 5 
</script>

var x=2;
变量x=5


var x=2;
取决于值
URL.new
。无论哪种方式,在CFML服务器有任何输入时,都只是文本

然后,该文本被发送回web服务器,web服务器将其发送回请求它的浏览器。然后浏览器将文本解释为HTML,在HTML中有一些文本被告知作为JavaScript处理。确实如此(将其视为JavaScript并运行)

但这与CFML服务器无关已经很久了。所有的CFML服务器都会大量输出文本


这可能有助于您理解与CFML服务器相对应的请求/响应生命周期:“

我可以看到您的代码在这里有一些错误-这是我将在这里看到的:

<script> 
    var x = 2;
    <cfif structKeyExists(URL, "new") AND URL.new IS true>x = 5;</cfif>
</script>

var x=2;
x=5;
  • 我添加了一个检查,以查看URL范围中是否存在变量“new”-以防您在其他任何地方都没有这样做

  • 如果您使用的CFIF语句=何时应使用EQ或IS。我不知道为什么CFIF逻辑的语法与您可能期望的不同,我也不是100%了解IS和EQ之间的区别

  • 您已经声明了VAR x=2,因此无需再次定义变量-严格的JavaScript引擎可能会在这一点上抛出错误。它已经定义好了,所以只需设置它的值

  • 如前所述,在CF注入行的末尾缺少分号

  • 您应该得到的代码是:

    <script> 
        var x = 2;
        x = 5;
    </script>
    
    
    var x=2;
    x=5;
    

    除此之外,你想做的是正确的。我的工作中经常会有一个CF>JavaScript“桥”——只要你知道一个是在编译时运行的,在页面传递到web服务器之前,另一个是在运行时在客户机上运行的。

    对解释应用程序服务器范例的博客文章链接
    var x=5
    的语法错误,我投了赞成票。使用
    var x=5