JQuery UI автозаполнение возвращает только одно значение - PullRequest
0 голосов
/ 03 марта 2011

У меня проблемы с автозаполнением, поскольку он возвращает только одну запись, тогда как удаленный веб-сервис возвращает 10 элементов.

Интересно, не могли бы вы взглянуть на мой код и посмотреть, выполняю ли ячто-то не так?

Полученные данные:

{"d": "[\" 02102008633 \ ", \" 02102008794 \ ", \" 02102008980 \ ", \" 02102015321 \", \" 02102018743 \ ", \" 02102024602 \ ", \" 02102037454 \ ", \" 02102038366 \ ", \" 02102040774 \ ", \" 02102056369 \ "]"}

jQuery(txtDestination).autocomplete({
            minLength: 2,
            source: function (request, response) {
                jQuery.ajax({
                    url: "/SearchService.asmx/GetDestinationAutocompleteValue?" + "accountCode=" + accountCode.toString() + "&criteria=" + jQuery(txtDestination).val().toString(),
                    data: "{}",
                    type: "GET",
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        if (data != null && data.hasOwnProperty('d') && eval(data.d) != null) {
                            var result = new Array(eval(data.d));
                            response(jQuery.map(result, function (item, ctr) {
                                return { label: item[ctr], id: item[ctr], value: item[ctr] }
                            }));
                        }
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) { alert(textStatus + " " + errorThrown); }
                });
            }
        });

Спасибо за миллион!

Приветствия, Энн

1 Ответ

1 голос
/ 03 марта 2011

Я думаю, что нашел это ... Посмотрите на эту строку:

var result = new Array(eval(data.d));

Теперь, поскольку eval(data.d) уже вычисляет массив, вы, по сути, вызываете что-то вроде этого:

var result = new Array([1, 2, 3]);

Который фактически создаст массив длины один, первый элемент которого - массив длины три. Это тоже меня огорчило, пока я не подумал проверить это на консоли JS (и не заставляйте меня начинать распечатку, не считая квадратных скобок ...):

js> ra1 = new Array(1, 2, 3)
1,2,3
js> ra2 = new Array([1, 2, 3])
1,2,3
js> ra1.length
3
js> ra2.length
1

Но хорошая новость в том, что это легко исправить:

var result = eval(data.d);

Надеюсь, это поможет!

...