【发布时间】:2011-10-18 22:33:03
【问题描述】:
我被难住了。我有一个现有的自动完成功能,该功能在从 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 };
});
}
});
});
但这什么也没做。由于 parse 函数不在自动完成 API 中,所以我在这里瞎了眼。
我认为这些问题足够相关,不能将它们分成两个问题;让我知道你是否认为我应该这样做。一如既往,谢谢。
【问题讨论】:
-
我会把剩下的留给其他更有资格的人;)但引用可能是由于隐式转换。前六个值显然不是数字,因为它们以前导“0”开头。其余的可能被视为数字。
-
@Leigh 自动完成(以及 OP 的 ajax)期待
json回来。它没有得到它。 autcomplete 还需要一个label或value字段或两者来填充输入。 -
@jk - 有道理。我在想它应该是
json格式。但除此之外没有什么可提供的;)
标签: jquery json coldfusion jquery-autocomplete