在jquery自动完成中解析json的问题

时间:2011-02-24 03:26:35

标签: jquery json

我在jQuery自动完成中解析我的JSON数据时遇到了麻烦。我的JSON来自这段代码:

<cfset theQ = lcase(q)>

<cfquery datasource="#source#" name="qry" maxrows="20">
    select top 10 lastname
    from info
    where
    lower(lastname) like '#theQ#%'
    order by lastname
</cfquery>

<!---
Before we can serialize the query, we need to convert
it to an array of structs.
--->
<cfset rows = [] />

<!--- Loop over the query to convert it. --->
<cfloop query="qry">

<!--- Create a row struct. --->
<cfset row = {} />

<!--- Add each column to our struct. --->
<cfloop
index="column"
list="#qry.columnList#"
delimiters=",">

<cfset row[ column ] = qry[ column ][ qry.currentRow ] />

</cfloop>

<!--- Append the row struct to the row array. --->
<cfset arrayAppend( rows, row ) />

</cfloop>

<!---
Now that we have converted our query to an
array of structs, we can serialize it using the
serializeJSON() method.
--->
<cfset serializedQuery = serializeJSON( rows ) />
<cfoutput>#serializedQuery#</cfoutput>

我将查询转换为结构数组,然后将其序列化为JSON。现在,在jQuery自动完成中解析此JSON不起作用。我得到的数据如下:

[{"lastname":"abc"},{"lastname":"def"},{"lastname":"ghi"}]

以下是自动填充的代码:

$(document).ready(function() {
    $("#name").autocomplete("data/name.cfm",{
        minChars:1,
        delay:10,
        autoFill:false,
        matchSubset:false,
        matchContains:1,
        cacheLength:10,
        selectOnly:1,
        dataType: 'json',

        parse: function(data) {
            var parsed = [];
            var dataParsed = $.parseJSON(data);
                for (var i = 0; i < dataParsed.length; i++) {
                parsed[parsed.length] = {
                data: dataParsed[i],
                value: dataParsed[i].lastname,
                result: dataParsed[i].lastname
                };
            }

            return parsed;
        },
        formatItem: function(item) {
            return item;
        }

    });

当我输入文本字段时,我将整个JSON字符串作为搜索结果。我已经查看了其他代码进行解析但仍然无法使其正常工作。有帮助吗?感谢。

参考文献: Simon Whatley自动完成; Ben Nadel查询结构数组并序列化为json

1 个答案:

答案 0 :(得分:0)

一个问题是,在你的for循环中,当你应该迭代到data.length时,你正在迭代到dataParsed.length

如果你使用Simon Whatley自动完成插件,根据他网站上的演示,该插件只是希望自动完成结果在各行上,例如:

abc
def
ghi

所以你应该摆脱你在jquery中提供的parse函数,并修改你的coldfusion脚本每行返回一个名称,即abc\ndef\n...不需要使用json或其他任何东西。 (至少那就是他的网站上的这个演示如何运作http://www.simonwhatley.co.uk/examples/autocomplete/jquery/data/country.php

要确认一下,您应该在alert('aaa')函数的内部添加parse(),我打赌您会看到它永远不会被调用。