Автозаполнение JQuery с использованием веб-службы ASP.Net - PullRequest
1 голос
/ 12 октября 2011

У меня есть веб-сервис ASP.Net, вызываемый в JQuery, и ответ в раскрывающемся списке представлен в формате JSON.Ниже приведен фрагмент

$(document).ready(function () {
$("#txtTest").autocomplete({ 
     source: function (request, response) {  
         $.ajax({  
             type: "POST",  
             contentType: "application/json; charset=utf-8", 
             url: "Webservice.asmx/GetNames",
             data: "{'prefix':'" + request.term + "'}",  
             dataType: "json",  
             async: true,  
             success: function (data){  
                response($.map(data, function(item)
                { 
/*Below commented return has to display the First item alone in JSON which fails*/
//return { label: item.First, value: item.First } 
 /* Below return gives the JSON response with first and second*/
      return item ; 
               }));  
            },  
            error: function (result) {  
               alert("Due to unexpected errors we were unable to load data");  
            }  
         });
     },  
     minLength:2
 });
 });

. И ответ JSON на автоматическое заполнение выглядит как

{"First":"Steve","Second":"AK"}
{"First":"Evet","Second":"EV"}
{"First":"Stevens","Second":"SV"}

Как отобразить только «первые» элементы (как Стив, ЭветСтивенс), как выход из выпадающего автозаполнения?

Пожалуйста, помогите мне!

Ответы [ 2 ]

1 голос
/ 12 октября 2011

«Ответ JSON», как вы его описали, не является допустимым JSON.Если это то, что возвращает ваш сервис, это неправильно.Этот текст представляет 3 различных объекта Javascript.Любая из трех строк, взятая отдельно, является допустимой JSON.Все эти строки соединены вместе, что не является допустимым JSON.

Это допустимый JSON, представляющий массив из трех объектов:

[{"First":"Steve","Second":"AK"},
 {"First":"Evet","Second":"EV"}, 
 {"First":"Stevens","Second":"SV"} ]

(пробел не имеет значения)

Это недопустимый JSON:

{"First":"Steve","Second":"AK"} 
{"First":"Evet","Second":"EV"} 
{"First":"Stevens","Second":"SV"} 

Так что, если это точная картина ответа, ваш сервис не работает.Сначала исправьте это, затем мы можем ответить на вопрос.


После того, как вы получите ответ в правильной форме, например,

[{"First":"Steve","Second":"AK"},
 {"First":"Evet","Second":"EV"}, 
 {"First":"Stevens","Second":"SV"} ]

..., вы сможете отобразить результаты,Но вы хотите отобразить только первый элемент каждого элемента в массиве.Для этого вам нужно отобразить этот исходный массив в другой массив, массив строк, а не массив объектов.Для этого вы можете использовать функцию jQuery map().Это выглядит так:

  $.map( realArray, function(val, i) {  ...map one item here...  });

В вашей функции успеха с вашими возвращенными данными вы будете использовать ее следующим образом:

        success: function (data){     
            response($.map(data, function(item) {
              return item.First;
            }));
        },

Функция, которая вызывается по карте, один раздля каждого элемента в оригинальном конверте преобразует элемент типа {"First":"Steve","Second":"AK} в элемент типа "Steve".Для всего массива, например

[{"First":"Steve","Second":"AK"},
 {"First":"Evet","Second":"EV"}, 
 {"First":"Stevens","Second":"SV"} ]

.., результат вызова $.map() равен ["Steve", "Evet", "Stevens"].Этот результат передается в функцию response, которая затем отображает этот список элементов в виджете автозаполнения.

0 голосов
/ 15 февраля 2012

У меня возникла та же проблема, и мне удалось ее исправить, заменив значения NULL в запросе пустыми строками.

Автозаполнение пытается изменить JSON на элемент автозаполнения, но не может измениться, когда база данных возвращает нулевые значения через ваш веб-сервис ...

...