我可以在JavaScript中使用ColdFusion标签吗?

use*_*005 2 coldfusion

我可以在JavaScript中使用ColdFusion标签吗?例如:

 <script language="javascript" type="text/javascript">
   function validateUser() {
    var userName = document.getElementById("username");

 <CFQUERY DATASOURCE="mydatasourcename" NAME="getUser">
  select USER_ID,COUNT(*) from  user u 
 where u.firstname=userName;
  </CFQUERY>
 <cfif getUser.recordCount EQ 0>
   <!--- Show eroor message --->
   <cfelse>
    <!--- Assign userId to hidden field --->
    document.getElementById("userid").value=#USER_ID#
  </cfif>   
    }
 </script>

<input type='textbox' name='username' id='username' onblur=validateUser()/>
<input type='hidden' name='userid' id='userid'/>
Run Code Online (Sandbox Code Playgroud)

当最终用户输入他们的用户名时,我想检查数据库中是否存在该用户名.如果它存在,我必须将用户标识保留在隐藏字段中,否则抛出错误.

我这样做了吗?如果是错的,你能建议正确的方法吗?

Ada*_*ron 9

长版:http://blog.adamcameron.me/2012/10/the-coldfusion-requestresponse-process.html

简短版本:不,你做得不对.

中型StackOverflow友好版本:CFML代码在请求的服务器端运行; JavaScript在客户端浏览器上运行.需要明确的是:ColdFusion服务器根本不会直接与浏览器通信:中间有一个Web服务器.客户端浏览器请求文件,Web服务器配置为将.cfm请求传递给ColdFusion服务器,并运行其代码,将生成的字符串(例如:HTML网页)返回给Web服务器,然后将其返回给浏览器.该HTML可能包含浏览器将执行的JavaScript(内联或外部请求).

希望你可以看到服务器端代码和客户端代码之间没有直接的交互.

您可以使用两个工具来实现两个异步通信.首先:CFML代码写出文本,但该文本可以是JS,浏览器在最终收到它时运行.就像是:

<cfset msg ="G'day world">
<script>alert("<cfoutput>#msg#</cfoutput>");</script>
Run Code Online (Sandbox Code Playgroud)

一旦CFML服务器处理完毕,那么发送回浏览器的是:

<script>alert("G'day world");</script>
Run Code Online (Sandbox Code Playgroud)

这样,如果服务器端代码"写出"数据作为其响应的一部分,则可以在客户端进程中使用服务器端代码数据.上面的例子非常简单,并不是解决这个问题的"良好实践"方式,但它证明了这种技术.

如果您需要在客户端上使用JS代码与服务器进行通信,那么您唯一的(实际)资源就是将AJAX请求发送回服务器以传递客户端信息以进行进一步的服务器端处理和服务器回应某事.在你的问题范围内解释如何最好地做到这一点,但有大量的信息可以做到这一点.

CFML为你提供了一些编写HTML和JS的"向导"来促进这一点,但总的来说这是实现这一目标的一种不好的方法,所以我不推荐它.但是,我将指出一个项目,它为内置的CFML魔法提供HTML/JS/CSS解决方案:https://github.com/cfjedimaster/ColdFusion-UI-the-Right-Way

回到简短的回答:不,你不能按照很好的理由去做你想要做的事情,但是如果你修改你的方法,你就可以达到你想要的目的.

您需要注意的是通过AJAX将表单字段传递回服务器(jQuery使这非常简单),并<cfquery>在单独的请求中运行您的代码.

如果你读到我从一开始就提到的博客文章(透露:我写了它,但我是专门针对这样的情况写的),那么你就会理解为什么.

如果你在处理部分解决方案时遇到困难:提出另一个问题,更专注于你所坚持的任何部分.