0

我正在尝试使用带有逗号的字段的自动完成功能。当我输入逗号时,它会忽略它,并且不会返回任何内容。到目前为止,我有这个:

索引.cfm

<!--- A simple form for auto suggest --->
<cfform action="autosuggest.cfm" method="post">
  Artist: 
  <cfinput type="text" name="artist" size="50" autosuggest="cfc:autosuggest.findartist({cfautosuggestvalue})" autosuggestminlength="4" maxresultsdisplayed="5" /><br /><br />
</cfform>

自动建议.cfc

<cfcomponent output="false">

    <!--- Lookup used for auto suggest --->
    <cffunction name="findartist" access="remote" returntype="string">
        <cfargument name="search" type="any" required="false" default="">

        <!--- Define variables --->
        <cfset var local = {} />

        <!--- Query Location Table --->
        <cfquery name="local.query" datasource="#application.datasource#" >
            select      DISTINCT artist
            from        items
            where       artist like <cfqueryparam cfsqltype="cf_sql_varchar" value="#ucase(arguments.search)#%" />
            order by    artist
        </cfquery>

        <!--- And return it as a List --->
        <cfreturn valueList(local.query.artist)>
    </cffunction>

</cfcomponent>

当我尝试搜索 Brown,James 时,它不会返回任何内容。我需要在其中添加什么才能用逗号返回结果。

谢谢

4

1 回答 1

1

一种选择是让您的函数返回一个数组,而不是一个字符串。那么分隔符就不是问题了。

   <cffunction name="findartist" access="remote" returntype="array">
      ...
      <cfreturn listToArray(valueList(local.query.artist, chr(30)), chr(30))>
   </cffunction>

更新:

正如 Raymond 所指出的,在 CF 端避免分隔符问题的唯一可靠方法是不使用它们。而是遍历查询以构建数组,即:

   <cffunction name="findartist" access="remote" returntype="array">
       ...
       <cfset local.arr = []>
       <cfloop query="local.query">
           <cfset arrayAppend(local.arr, local.query.artist)>
       </cfloop>

       <cfreturn local.arr>
   </cffunction>
于 2013-06-29T02:29:10.753 回答