Javascript ColdFusion 11:如何在不重新加载页面的情况下检查是否在Struct对象中找到表单字段值?

Javascript ColdFusion 11:如何在不重新加载页面的情况下检查是否在Struct对象中找到表单字段值?,javascript,jquery,ajax,coldfusion,Javascript,Jquery,Ajax,Coldfusion,场景:我有一个带有促销代码字段的注册表单。我需要检查用户输入的促销代码是否有效,而无需重新加载页面 促销代码都保存在这样的结构中(不是实际值,但格式相同): 在我的组件文件('cmp-settings.cfc')中,我创建了以下函数: <cffunction name="ValidatePromoCode" access="remote" returnformat="json" output="false"

场景:我有一个带有促销代码字段的注册表单。我需要检查用户输入的促销代码是否有效,而无需重新加载页面

促销代码都保存在这样的结构中(不是实际值,但格式相同):


在我的组件文件('cmp-settings.cfc')中,我创建了以下函数:

<cffunction name="ValidatePromoCode" access="remote" returnformat="json" output="false">
    <cfargument name="PromoCode" type="string" required="true">
    <cfif StructKeyExists(REQUEST.PromoCodeStruct, arguments.PromoCode)>
        <cfset isvalidPromoCode = true>
    <cfelse>
        <cfset isvalidPromoCode = false>
    </cfif>
    <cfreturn isvalidPromoCode />
</cffunction>

我正在处理的表格部分:

<label for="fPromo">Promo Code</label>

<input type="text" class="form-control" id="id_PromoCode" name="PromoCode" maxlength="10"> 
<a href="javascript:void();" onclick="applyPromo();" class="btn btn-success btn-sm">Apply</a>
                                
<div id="pInvalid" style="display:none;color:##ff0000;font-weight:bold;">Invalid code!</div>
<div id="pValid" style="display:none;color:##66cc00;font-weight:bold;">You've entered a valid code!</div>
促销代码 无效代码! 您输入了一个有效的代码! “applyPromo()”是一个基本javascript函数,它在pInvalid和pValid字段上运行显示/隐藏过程。这就是我要替换的脚本,因为它当前公开了页面源代码中的促销代码列表。我希望它必须被AJAX调用所取代,但我对JQuery和AJAX还不够熟悉,无法自己找到解决方案

StackOverflow新手的任何建议和帮助都将不胜感激。

当您单击onclick=“applyPromo();”时,此函数需要向服务器发出Ajax请求,以验证促销代码,返回折扣金额并将其应用到UI中

提交表单时,您需要在上重新验证折扣代码 服务器端。确保调整后的总额是在 还有服务器。不要相信表格不是随便取的 客户端代码表示为调整后的总数

您有一个ColdFusion变量
sysPromoCode
,它定义了代码,并且仅在服务器上执行时存在于中。快速而肮脏的方法是创建一个
PromoCodeService.cfc

<cfcomponent>

    <cffunction name="init" access="public" output="false" returntype="any">
        <cfset variables.PromoCodeStruct = {
            "PC1" : 1,
            "PC5" : 5,
            "PC10" : 10,
            "PC15" : 15,
            "PC20" : 20
        } >
        <cfreturn this>
    </cffunction>

    <cffunction name="getDiscountCodes" access="public" output="" returntype="struct"
        hint="I return all available discount codes.">
        <cfreturn variables.PromoCodeStruct>
    </cffunction>

    <cffunction name="getDiscountByCode" access="public" output="false" returntype="numeric"
        hint="I return a valid discount or -1 for invalid codes.">
        <cfargument name="dicsount_code" type="string" required="true">
        <cfif structKeyExists( variables.PromoCodeStruct, arguments.dicsount_code )>
            <cfreturn variables.PromoCodeStruct[arguments.dicsount_code]>
        <cfelse>
            <cfreturn -1>
        </cfif>
    </cffunction>

</cfcomponent>
此代码验证代码是否通过HTTP POST提交,然后检查结构是否有匹配的密钥并返回折扣金额。如果没有匹配项,则函数
getDiscountByCode()
将返回-1。如果缺少所需的数据,请求仍然返回
-1

然后,Ajax调用可以在UI中应用折扣金额,或者显示代码无效(-1)

然后,您可以替换现有的
定义,如下所示:

<cfset oPromoCodeService = new path.to.PromoCodeService()>
<cfset REQUEST.PromoCodeStruct = oPromoCodeService.getDiscountCodes()>

因此,您可以继续使用
REQUEST.PromoCodeStruct
之后的操作

如果需要的话,这还可以为您提供将折扣代码移动到数据库的路径。只需使用查询更新这些函数,就可以了

最后一点注意:

他不愿意被起诉,因为他要花一段时间来修复引擎盖下的大部分混乱

您可以根据需要付费修复混乱,或者您的生活成本可能更高。

当您
onclick=“applyPromo();”
时,此函数需要向服务器发出Ajax请求,以验证促销代码,返回折扣金额并在UI中应用它

提交表单时,您需要在上重新验证折扣代码 服务器端。确保调整后的总额是在 还有服务器。不要相信表格不是随便取的 客户端代码表示为调整后的总数

您有一个ColdFusion变量
sysPromoCode
,它定义了代码,并且仅在服务器上执行时存在于中。快速而肮脏的方法是创建一个
PromoCodeService.cfc

<cfcomponent>

    <cffunction name="init" access="public" output="false" returntype="any">
        <cfset variables.PromoCodeStruct = {
            "PC1" : 1,
            "PC5" : 5,
            "PC10" : 10,
            "PC15" : 15,
            "PC20" : 20
        } >
        <cfreturn this>
    </cffunction>

    <cffunction name="getDiscountCodes" access="public" output="" returntype="struct"
        hint="I return all available discount codes.">
        <cfreturn variables.PromoCodeStruct>
    </cffunction>

    <cffunction name="getDiscountByCode" access="public" output="false" returntype="numeric"
        hint="I return a valid discount or -1 for invalid codes.">
        <cfargument name="dicsount_code" type="string" required="true">
        <cfif structKeyExists( variables.PromoCodeStruct, arguments.dicsount_code )>
            <cfreturn variables.PromoCodeStruct[arguments.dicsount_code]>
        <cfelse>
            <cfreturn -1>
        </cfif>
    </cffunction>

</cfcomponent>
此代码验证代码是否通过HTTP POST提交,然后检查结构是否有匹配的密钥并返回折扣金额。如果没有匹配项,则函数
getDiscountByCode()
将返回-1。如果缺少所需的数据,请求仍然返回
-1

然后,Ajax调用可以在UI中应用折扣金额,或者显示代码无效(-1)

然后,您可以替换现有的
定义,如下所示:

<cfset oPromoCodeService = new path.to.PromoCodeService()>
<cfset REQUEST.PromoCodeStruct = oPromoCodeService.getDiscountCodes()>

因此,您可以继续使用
REQUEST.PromoCodeStruct
之后的操作

如果需要的话,这还可以为您提供将折扣代码移动到数据库的路径。只需使用查询更新这些函数,就可以了

最后一点注意:

他不愿意被起诉,因为他要花一段时间来修复引擎盖下的大部分混乱

你要么根据需要付费来修复混乱,要么你的生活成本可能更高