Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何基于表单选择元素的值执行数据库查询?_Javascript_Jquery_Ajax_Coldfusion_Cfml - Fatal编程技术网

Javascript 如何基于表单选择元素的值执行数据库查询?

Javascript 如何基于表单选择元素的值执行数据库查询?,javascript,jquery,ajax,coldfusion,cfml,Javascript,Jquery,Ajax,Coldfusion,Cfml,我使用ColdFusion作为我的应用服务器,使用SQL server作为数据库。我有一个选择表单元素,其中列出了许多车辆:Volvo S60,BMW M6,VW捷达 根据用户选择的车辆,我需要我的网页执行数据库查询,以了解他们选择的“类型”车辆,例如SUV、Coupe、敞篷车。根据从数据库返回的“类型”,数据库将返回适合该车型的选项列表。我的数据库表可以根据vehicle下拉列表的值执行此操作,所以这一切都很好 现在,我想以一组复选框的形式列出该车辆“类型”的可用选项。这样做应该是在数据库re

我使用ColdFusion作为我的应用服务器,使用SQL server作为数据库。我有一个选择表单元素,其中列出了许多车辆:
Volvo S60
BMW M6
VW捷达

根据用户选择的车辆,我需要我的网页执行数据库查询,以了解他们选择的“类型”车辆,例如SUV、Coupe、敞篷车。根据从数据库返回的“类型”,数据库将返回适合该车型的选项列表。我的数据库表可以根据vehicle下拉列表的值执行此操作,所以这一切都很好

现在,我想以一组复选框的形式列出该车辆“类型”的可用选项。这样做应该是在数据库resultset中循环并为每一行生成一个复选框的简单情况


我想在不刷新页面的情况下执行此操作如何从下拉列表中动态获取值,将该值传递到数据库,返回结果,然后显示相应的复选框?

很简单。每个选项中都应包含编码的值,例如

<select>
<option class="car" name="car" value="volvo">Volvo</option>
<option class="car" name="car" value="honda">Honda</option>
<option class="car" name="car" value="ford">Ford</option>
</select>

下面是一个工作示例:。它没有演示AJAX调用,但演示了如何获取包含在AJAX调用中的数据。

有一个示例说明了在中需要做什么,其中演示了必要的技术。这并不能完全满足您的需求,但需要将标记从纯文本更改为复选框以满足您的需求。这里的代码太多,无法复制,但关键是使用
在客户端的JS和服务器端的CFC之间设置代理,使JS能够从服务器检索数据


使用
不需要使用自己的JS AJAX处理,或者使用JQuery(etc)来实现。也就是说,用手做这件事并不太难。。。使用文档中演示的技术将CF与前端代码完全解耦是很容易的(不使用CF进行客户端工作是一个很好的例子)。。。这一切都归结为让事件处理程序监听相关事件,然后以某种方式对服务器进行AJAX调用以获取数据,然后将其放入
或其他程序中。在这种情况下,CF only reland提供代理位:您仍然需要自己执行其余操作。

我在前面的评论中提到,在ColdFusion中执行此操作的最简单方法是将表单元素绑定到cfc方法。谷歌搜索“cfinput bind”会得到很多例子,但既然我被要求提供答案,我将展示一个我曾经写过的例子。这并不完全是OP想要的,但它展示了总体思路。它将根据另一个文本框的值填充一个文本框

请注意,cfc和cfm文件必须位于同一目录中

.cfm文件

<!--- When you type a clinic code here: ---->
<div id="clinicCodeInput" class="hidden">
Clinic Code <input name="clinicCode" type="text" />
</div>

<!---- A query result will appear here ---->
<div id="clinicNameFromPatientSatisfaction" class="hidden">
Patient Satisfaction Name <cfinput type="text" 
name="NameOfClinic" 
bind="cfc:PatientSatisfactionClinics.GetClinicName({clinicCode})" 
bindonload="no"> 
</div>

诊所代码
患者满意度名称
.cfc文件

<cffunction name="GetClinicName" access="remote" returntype="string">
<cfargument name="clinicCode" type="string" required="yes">
<cfscript>
var clinicName = QueryNew("a");
var returnString = "No Record for Clinic Code " & arguments.clinicCode & ".";
var clinicCodeAsInt = 0;

if (isNumeric(arguments.clinicCode) 
and round(arguments.clinicCode) is arguments.clinicCode)
clinicCodeAsInt = arguments.clinicCode;
</cfscript>

<cfif clinicCodeAsInt gt 0>
<cfquery name="clinicName" datasource="dw">
select name
from patient_satisfaction_clinic
where clinic_code = 
<cfqueryparam cfsqltype="cf_sql_integer" value="#clinicCodeAsInt#">
</cfquery>

<cfif clinicName.recordcount gt 0>
<cfset returnString = clinicName.name[1]>
</cfif>
</cfif>  <!--- clinicCodeAsInt gt 0 --->

<cfreturn returnString>

</cffunction>

var clinicName=QueryNew(“a”);
var returnString=“没有临床代码记录”&arguments.clinicCode&”;
var-clinicCodeAsInt=0;
if(isNumeric(arguments.code)
而round(arguments.clinicCode)是arguments.clinicCode)
clinicCodeAsInt=arguments.clinicCode;
选择名称
来自患者满意度诊所
其中诊所代码=

好的,以下是我所做的,到目前为止似乎对我有用。但我将回顾亚当和丹的善意回答

我在我的Vehicle.cfm页面上创建了一个表单,其中包含除复选框之外的所有表单元素

我创建了一个名为vehicleOptions.CFM的新CFM模板,它接受一个参数,运行SQL查询,然后输出实际的HTML以创建复选框

然后,我在Vehicle.cfm页面上的表格中进入了我希望复选框出现的区域,并键入以下内容:

“Model”是我表单上元素的ID,它保存用户选择的车辆的值。因此,每当用户更改下拉列表中的模型时,该区域每次都会使用不同的复选框进行更新。它真的很棒,我不需要写一行Javascript


这个解决方案可以满足我的需要,但我猜它不是ColdFusion AJAX最优雅的用法?正如我所说的,我将回顾答案,并尝试找出更好的解决方案。感谢各位CF开发者的帮助

从一些AJAX教程开始,它们很容易找到。可惜问题已经解决了。如果OP仍在查看,则需要类似于相关选择的内容。使用coldfusion实现这一点的最简单方法是将cfinputs绑定到cfc方法。有关cfinput的文档将指导您。@DanBracuk。这是另一个人们在S/O上有一次小小的动力之旅的例子(请参阅我最近的一篇博客文章:)。这主要是一个ColdFusion的问题,但是没有一个“闭门人”在这个网站上有任何ColdFusion的历史。真是一群失败者。这绝对是一个问题,也是一个合法的问题。丹,建议你投票重新开放。。。也许我们可以找到另外三个人来投同样的票,我们可以继续回答。投票重新开放,因为这可能会得到具有ColdFusion专业知识的人的肯定回答,但答案不容易通过快速搜索确定。换句话说,如果我不知道下一步该去哪里,或者不寻求帮助,或者找不到这样一个(已回答的)问题@DanBracuk-如果重新打开,考虑将您的评论扩展为答案。@AdamCameron-我的声誉仅为对结束或重新开始的问题进行投票所需的12%。然而,在我之前关闭了自己的一个线程之后,我知道OP可以向该线程添加注释。如果能看到他有兴趣的迹象,那就太好了。我读了亚当的博客,内容是关于关闭原因的措辞。和我的一样。我怀疑它来了
<cffunction name="GetClinicName" access="remote" returntype="string">
<cfargument name="clinicCode" type="string" required="yes">
<cfscript>
var clinicName = QueryNew("a");
var returnString = "No Record for Clinic Code " & arguments.clinicCode & ".";
var clinicCodeAsInt = 0;

if (isNumeric(arguments.clinicCode) 
and round(arguments.clinicCode) is arguments.clinicCode)
clinicCodeAsInt = arguments.clinicCode;
</cfscript>

<cfif clinicCodeAsInt gt 0>
<cfquery name="clinicName" datasource="dw">
select name
from patient_satisfaction_clinic
where clinic_code = 
<cfqueryparam cfsqltype="cf_sql_integer" value="#clinicCodeAsInt#">
</cfquery>

<cfif clinicName.recordcount gt 0>
<cfset returnString = clinicName.name[1]>
</cfif>
</cfif>  <!--- clinicCodeAsInt gt 0 --->

<cfreturn returnString>

</cffunction>