簡體   English   中英

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變量的存在。 否則,如果未在URL中傳遞new參數,則將引發錯誤,指出該變量不存在。

如果URL不包含名為“ new”的參數; http://www.yourdomain.com/somepage
或“新”參數確實存在,但其值不被視為“ 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錯誤。

注意,我還提到了“如果該值被認為是對還是錯”。 在ColdFusion中,布爾表達式,True,非零數字以及字符串“ Yes”,“ 1 |”,“ True”是等效的; 和False,0,以及字符串“ No”,“ 0”和“ False”是等效的。 布爾評估不區分大小寫。 例如,True,TRUE和True是等效的。 因此,在您的示例中, http://www.yourdomain.com/somepage? new = 1也會被認為是正確的。

好吧:您並不是按照建議的方式真正使用“帶有Javascript代碼的CFML”。 您所擁有的只是一些文本,而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服務器上輸入任何內容時,它們都只是文本。

然后將該文本發送回Web服務器,然后將其發送回請求它的瀏覽器。 然后,瀏覽器將文本解釋為HTML,並且HTML中包含一些被告知將其視為JavaScript的文本。 這樣就可以了(將其作為JavaScript進行處理並運行)。

但這很久了,因為CFML服務器與它有任何關系。 所有的CFML服務器都完成文本處理。

這可能有助於您了解相對於CFML服務器的請求/響應生命周期:“ CFML請求/響應過程

在這里,您可能會發現您的代碼有幾處錯誤-這是我要在此處顯示的內容:

<script> 
    var x = 2;
    <cfif structKeyExists(URL, "new") AND URL.new IS true>x = 5;</cfif>
</script>
  1. 我添加了一個檢查以查看變量'new'是否存在於URL范圍中-以防萬一您在其他任何地方都沒有做過。

  2. 如果您的CFIF語句使用=,則應使用EQ或IS。 我不知道為什么CFIF邏輯的語法與您可能真正期望的不同,而且我並不是100%明白IS和EQ之間的區別。

  3. 您已經聲明了VAR x = 2,因此不需要再次定義變量-嚴格的JavaScript引擎可能會拋出錯誤。 它已經定義了,所以只需為其設置值。

  4. 如前所述,在CF注入線的末尾缺少分號。

您應該渲染的代碼為:

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

除此之外,您嘗試執行的操作都是有效的。 我經常在我的工作中使用CF> JavaScript'bridge'-只要您知道一個頁面在傳遞到Web服務器之前在編譯時運行,而另一個在運行時在客戶端計算機上運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM