проблема с разбором json в автозаполнении jquery - PullRequest
1 голос
/ 24 февраля 2011

У меня проблемы с анализом моих данных JSON в автозаполнении jQuery.Мой 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.Теперь синтаксический анализ этого JSON в автозаполнении jQuery не работает.Получаемые данные выглядят так:

[{"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 в качестве поискарезультат.Я искал другие коды для разбора, но все еще не могу заставить его работать.Любая помощь?Спасибо.

Ссылки: Саймон Уотли за автозаполнение;Бен Надель для запроса к массиву структур и сериализации в JSON

1 Ответ

0 голосов
/ 24 февраля 2011

Одна проблема состоит в том, что в цикле for вы выполняете итерацию до data.length, тогда как вы должны выполнять итерацию до dataParsed.length

Если вы используете плагин для автозаполнения Simon Whatley, в соответствии сДемо на своем веб-сайте плагин просто ожидал, что результаты автозаполнения будут на отдельных строках, например:

abc
def
ghi

Так что вам следует избавиться от функции parse, которую вы предоставляете в jquery, и изменить свой скрипт coldfusionчтобы вернуть одно имя в строке, т.е. abc\ndef\n... Нет необходимости использовать JSON или что-либо еще.(по крайней мере, так работает эта демонстрация на его сайте http://www.simonwhatley.co.uk/examples/autocomplete/jquery/data/country.php)

Просто для подтверждения, вы должны добавить alert('aaa') внутрь вашей функции parse(), держу пари, вы увидите, что она никогда не будетбудучи призванным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...