ColdFusion cfautosuggestvalue内容为空,即使从cfc返回了一个好的数组

时间:2014-02-21 01:55:56

标签: coldfusion autosuggest cfc

我正在使用ColdFusion Server版本8,0,0,176276。

我试图通过cfc添加一个自动建议的表单字段,异步填充。我使用http://www.forta.com/blog/index.cfm/2007/5/31/coldfusion-ajax-tutorial-1-autosuggest获取灵感和语法。

如果我使用静态查询,autosuggest字段工作正常(如Forta的第一个例子)。未在表单字段中使用时,cfc成功返回数组。

但是当我使用cfc进行自动提示时,没有提供任何建议。

我无法通过"查看来源,"来查看输入字段的内容。但如果我这样做,那就检查元素"在Chrome的这个领域,我可以看到一个div与class =" yui-ac-bd"还有一个ul。使用cfc时ul中的列表项为空,而当我使用静态查询时,列表项包含数组成员。

这是我页面上的代码:

<cfform>
<cfinput type="text" name="JobP"    
     autosuggest="cfc:autosuggest.AutoSuggest({cfautosuggestvalue})">
</cfform>

这是autosuggest.cfc:

<cfcomponent output="false" >
<cffunction name="AutoSuggest" access="remote" returntype="array">
<cfargument name="ObjectType" required="false" default="JOBP">

<cfset var result=ArrayNew(1)>

<cfquery name="Objects" datasource="UC4MP">
SELECT oh_name
FROM uc4.oh
WHERE oh_otype = '#ObjectType#'
AND oh_deleteflag = 0
AND oh_lastdate > sysdate - 90
AND oh_client = 1000
and oh_name like 'A%'
ORDER BY oh_name
</cfquery>

<cfloop query="Objects">
    <cfset ArrayAppend(result,oh_name)>
</cfloop>

<cfreturn result>

   

如果我将以下代码放在我的页面上,它会输出具有所需内容的数组:

<cfinvoke component="autosuggest" method="AutoSuggest"  returnVariable="result"> 
cfdump var="#result#">

我还没有使用jQuery;我的大部分关于CF autosuggest的谷歌搜索结果都涉及jQuery,而且我还没有能够通过它们来解决我的问题。以防万一你的建议。

2 个答案:

答案 0 :(得分:1)

谢谢大家的意见!我不知道有一个单独的ajax调试器,其输出立即使问题清楚:

info:http: Invoking CFC: /rd/autosuggest.cfc , function: AutoSuggest , 
arguments: {"ObjectType":"A"}

我的cfc参数不包含autosuggest本身,因此传递给输入字段的字符串被解释为“ObjectType”(第一个参数)并在查询中使用。由于没有记录,其中oh_otype ='A',结果始终为空。

我将cfc的参数更新为

    <cfargument name="ObjectType" required="yes" default="JOBP">
<cfargument name="autosuggest" required="yes">

并调用

<cfinput type="text" name="JobP" 
  autosuggest="cfc:autosuggest.AutoSuggest('JOBP',{cfautosuggestvalue})">

......现在效果很好。

答案 1 :(得分:0)

如果我在几年前做到这一点时没记错,我必须在Apacahe中创建一个虚拟目录,并使用以下指令设置permisions。如果您在该环境中工作,则可以将其应用于IIS。这应该适合你。

Alias /CFIDE "/opt/coldfusion9/wwwroot/CFIDE"
<Directory "/opt/coldfusion9/wwwroot/CFIDE">
allow from all
Options FollowSymLinks

从那时起,我一直在使用bootstrap 2中的类型头javascript。更干净,更容易风格。您仍然可以使用您的cfc来调用数据,我将包含代码以清除它的类型。

<cfinvoke component="autosuggest" method="AutoSuggest"  returnVariable="result"> 
<cfset mylist = ArrayToList(result, ",")>
<cfset mylist=ValueList(ShowKey.keyword)>
<cfset mylist = jSStringFormat(#mylist#)>


<input name="keyword" id="keyword"  type="text" data-provide="typeahead" data-items="10" data-source='["<cfoutput>#replace(mylist,',','","','ALL')#</cfoutput>"]'/>