我很沮丧我有一个现有的自动完成功能,当从ColdFusion自动建议输入调用时可以使用。现在,我正在尝试将页面转换为使用jQuery自动完成输入,并且无法使其正常工作。这是autosuggest.cfc中的现有功能:
<cffunction name="lookupSerialNumber" access="remote" returntype="Array" >
<cfargument name="search" type="any" required="false" default="">
<!--- Define variables --->
<cfset var data="">
<cfset var result=ArrayNew(1)>
<!--- Do search --->
<cfquery name="data">
SELECT DISTINCT SERIAL_NUMBER
FROM myTable
WHERE SERIAL_NUMBER LIKE '%#trim(ARGUMENTS.search)#%'
ORDER BY SERIAL_NUMBER
</cfquery>
<!--- Build result array --->
<cfloop query="data">
<cfset ArrayAppend(result, list)>
</cfloop>
<!--- And return it --->
<cfreturn result />
</cffunction>
输入“ 01”后,从自动完成输入中调用它时,控制台显示如下响应:
["0000003001","0100002000","0100002001","0100002002","0100002003","0100002004",7300000100,7300000101,7300000102,7300000103,7300000104,7300000105,7300000107,7300000108,7300000109,7300000110,7300000111,7300000112]
请注意,前六个响应在双引号内,而其他则不在。自动完成功能显示前六个响应,但不显示其余响应。
这是我的第一个问题。第二个是我希望将响应同时注入到文本和输入值中。当前,只有文本显示响应。我并不感到惊讶,因为我只返回一个值。但是,我不知道如何做到这一点。
我试过使用解析函数初始化自动完成功能,如下所示:
$(document).ready(function(){
$('#myInputID').autocomplete(
{source: function(request, response) {
$.ajax({
url: "cfc/autoSuggest.cfc?method=lookupSerialNumber>&returnformat=json",
dataType: "json",
data: {
search: request.term,
maxRows: 10
},
success: function(data) {
response(data);
}
})
},
parse: function(data){
return $.map(data, function(item) {
return { data: item, value: item, result: item };
});
}
});
});
但这什么也做不了。由于解析功能不在自动完成API中,因此我在这里盲目。
我认为这些问题足够相关,不会将它们分为两个问题。如果您认为我应该告诉我。一如既往,谢谢。
最佳答案
将查询结果放入结构中,然后将其添加到数组中。然后转换为json。自动完成功能需要返回json,并且需要label
或value
字段或两者兼有。这是一个例子:
<cffunction name="lookupSerialNumber" access="remote" returntype="String" >
<cfargument name="search" type="any" default="">
<!--- Define variables --->
<cfset var data="">
<cfset var result=ArrayNew(1)>
<cfset var returnStruct = "">
<!--- Do search --->
<cfquery name="data">
SELECT DISTINCT SERIAL_NUMBER
FROM myTable
WHERE SERIAL_NUMBER LIKE <cfqueryparam value="%#trim(ARGUMENTS.search)#%"
cfsqltype="cf_sql_varchar">
ORDER BY SERIAL_NUMBER
</cfquery>
<!--- Build result array --->
<cfloop query="data">
<cfset returnStruct = StructNew() />
<cfset returnStruct["label"] = SERIAL_NUMBER />
<cfset ArrayAppend(result,returnStruct) />
</cfloop>
<!--- And return it --->
<cfreturn serializeJSON(result) />
</cffunction>
如果
serializeJSON
函数在所使用的任何CF版本中均可用,则可以使用该函数。如果不是,请手动构建json字符串。这是一个tut:http://www.jensbits.com/2010/03/18/jquery-ui-autocomplete-with-coldfusion/