我很沮丧我有一个现有的自动完成功能,当从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,并且需要labelvalue字段或两者兼有。这是一个例子:

<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/

08-04 00:05