我有一个CF10功能,我试图弄清楚如何使自动完成工作正常。当我开始在文本框中键入名称时,查询将删除所有名称但不排序以匹配键入的字符。我的searchPhrase和query.term有问题吗?任何人都可以分享一些指导我如何修复文本框只下拉与用户输入内容相对应的名称吗?
<cffunction name="queryNames" access="remote" secureJSON="false">
<cfargument name="searchPhrase">
<cfquery name="query_names" datasource="dsn">
SELECT CONCAT(assoc_last, ' ', assoc_first) AS whole_name FROM table
WHERE assoc_status = 'ACTIVE'
</cfquery>
<cfset result = arrayNew(1) >
<cfloop query="query_names">
<cfset ArrayAppend(result, query_names.whole_name)>
</cfloop>
<cfreturn result>
</cffunction>
JS
<script type="text/javascript">
$(document).ready(function() {
$("#name").autocomplete({
source: function(query, response) {
$.ajax({
url: "redirects/autocomplete.cfc?method=queryNames&returnformat=json",
dataType: "json",
data: {
searchPhrase: query.term
},
success: function(result) {
response(result);
}
});
}
});
});
</script>
尝试:
<cfquery name="query_names" datasource="dsn">
SELECT CONCAT(assoc_last, ' ', assoc_first) AS whole_name FROM table
WHERE assoc_status = 'ACTIVE'
and assoc_last NOT LIKE 'Test%'
and len(assoc_last) > 0
AND ( assoc_last like 'searchPhrase%'
or assoc_first like 'searchPhrase%')
ORDER BY assoc_last
</cfquery>
<cfset result = arrayNew(1) >
<cfloop query="query_names">
<cfset ArrayAppend(result, query_names.whole_name)>
</cfloop>
<cfreturn result>
</cffunction>
答案 0 :(得分:4)
这是一种格式化的评论。 一次做一件事。一旦某些工作正常,就不要改变它。。
第1步 - 让您的查询正常运行。如果可能,首先使用数据库客户端执行此操作,然后将sql代码复制到ColdFusion。否则,创建除cfquery和cfdump标记之外的任何内容的.cfm文件。
第2步 - 让您的查询在函数内部工作。将查询放入步骤1中相同.cfm文件的函数中,并从该页面调用它。此步骤包括将参数传递给该函数。
第3步 - 让你的函数返回预期的结果。在你的情况下,你想要一个数组,所以一定要得到一个。
步骤4 - 将您的功能复制到cfc并从cfm文件中调用它。确保设置对远程的访问权限。
第5步 - 从javascript调用你的函数。