CFSelect没有绑定但文本框是

时间:2013-04-17 02:07:08

标签: coldfusion coldfusion-10 cfselect

我正在使用CF10。我有一个选择:

<cfselect name="company" id="company" query="qcompany" display="placename" value="placeid" queryposition="below">
                <option value="0">--Select--
</cfselect>

我有另一个与第一个绑定的cfselect:

<cfselect  name="People" bind="cfc:schedule.GetPeopleArray({company})" ></cfselect>

我无法让第二个cfselect显示任何结果。为了测试我是否从我的组件接收数据(我将在底部显示),我绑定了一个文本框:

 <cfinput name="test" bind="cfc:schedule.GetPeopleArray({company})" bindonload="false"/>

此文本框每次都显示对我的组件的调用结果,但cfselect从不显示任何内容。

我可能做错了什么?

我试过从我的组件返回数组和查询。没有帮助。我已经尝试将显示和值属性添加到第二个cfselect。没有帮助。

这是我的组件:

<cfcomponent output="false">
<cffunction name="GetPeopleArray" access="remote" returnType="array" output="false">
    <cfargument name="company" type="string" >

    <!--- Define variables --->
    <cfset var data="">
    <cfset var result=ArrayNew(2)>
    <cfset var i=0>

    <cfquery name="qEmployee" datasource="texas" >
        SELECT 0 as personid,'Select Person' as fullname,0 as sortorder
        UNION
        SELECT p.personid ,concat(firstname,' ',lastname) as fullname,3 as sortorder
        FROM person p
        INNER JOIN placeperson pp
        ON p.personid=pp.personid
        where personstatus='ACT'
        and pp.placeid=#arguments.company#
        order by sortorder,fullname
    </cfquery>

    <!--- Convert results to array --->
    <cfloop index="i" from="1" to="#qEmployee.RecordCount#">
        <cfset result[i][1]=qEmployee.personid[i]>
        <cfset result[i][2]=qEmployee.fullname[i]>
    </cfloop>

    <!--- And return it --->
    <cfreturn result>
</cffunction>   
 </cfcomponent>

1 个答案:

答案 0 :(得分:1)

最终,你可能想要使用jQuery,但是FWIW你现有的代码在CF10上运行良好。 (唯一的变化是为了简单起见删除了JOIN)所以你要么使用不同的代码,要么还有其他的事情我们不知道...

说实话,Ajax功能确实存在一些“怪癖”。但是,对于像这样的简单情况,你不应该有任何问题。除了添加文本字段外,您还执行了哪些其他调试或故障排除步骤?我通常建议的是:

  • 首先独立测试CFC 。使用各种样本值直接在浏览器中访问它:

    http://localhost/path/to/schedule.cfc?method=GetPeopleArray&company=someValue

    我使用原始代码执行此操作,发现当company值不是数字时发生错误,就像空字符串一样。 (我怀疑可能是问题)您可以通过替换0之类的无效ID来防止该错误。注意,请务必使用cfqueryparam来阻止sql注入。

      AND  pp.placeid = <cfqueryparam value="#val(arguments.company)#" 
                                cfsqltype="cf_sql_integer">
    
  • 启用CF管理员中的CF AJAX debugger 。然后将?cfdebug附加到测试脚本,以便查看控制台并检查问题/错误。

    http://localhost/path/to/yourTestForm.cfm?cfdebug

    再一次,我在调整查询后做了这个。但没有错误。您现有的cfform代码运行良好。

通常这两个步骤足以查明任何问题。如果没有,请确保您的Application.cfc文件(如果您使用的话)不会干扰Ajax请求。这是一个常见的问题。在任何Application文件之外的单独目录中测试代码。

编辑:此外,您也可以为选择列表设置bindonload="false"。因为您不想在页面首次加载时调用该函数。仅当用户从列表中选择某些内容时。