2015-05-07 1 views
0

У меня есть этот формат JSON, возвращаемый сервер по некоторым ключевым словам, набранных в текстовом поле:Как получить доступ к возвращаемым значениям JSON для автоматического завершения выбора?

[{"id":1,"value":"some string!"}] 

и я хочу, когда пользователь выбрал элемент, браузер перейти на другую страницу с помощью выделенной области id; который существует в возвращенном JSON. это мой автозаполнения код:

$(function() { 

$("#search-box").autocomplete({ 
    source: function (request, response) { 
     $.ajax({ 
      type: "GET", 
      url: "../Contenthandler/Search.ashx", 
      dataType: "json", 
      data: 'query=' + request.term, 
      success: function (data) { 
       response($.map(data, function (item) { 
        return { label: item.value }; 
       }) 
     ); 

      } 
     }); 
    }, 
    minLength: 3, 
    open: function() { 
     $(this).removeClass("ui-corner-all").addClass("ui-corner-top"); 
    }, 
    close: function() { 
     $(this).removeClass("ui-corner-top").addClass("ui-corner-all"); 
    }, 
    select: function (event, ui) { 
     if (ui.item) { 
      window.location.href = "../ControlPanel.aspx?id=" + ui.item.id; 
     } 
    } 
}); 

}); 

но ui.item.id является undefined. Как я могу получить доступ к id (1) о событии выбора?

+0

По вашему результату JSON, например, внешний элемент большинства данных является массивом. Поэтому вам нужно будет ссылаться на нотацию массива в этот момент. – Taplar

+0

@Taplar so, Как я могу получить доступ к 'id'? –

+0

Вы получаете ответ? Другими словами, когда-либо назывался ваш обработчик 'success'? Точка Taplar заключается в том, что объект результатов * isnt json *, но ваш вызов ajax ожидает ответ json. – wahwahwah

ответ

1

У вас нет id как свойство объектов, которые вы сопоставили с массивом, переданным автозаполнению в рамках вашего успеха ajax.

Ваши объекты имеют только одно свойство label. Добавьте другие свойства, необходимые или просто расширить свои объекты ответа с label собственности

response($.map(data, function (item) { 
     return { label: item.value, id : item.id };// add "id" property 
    }); 

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

См демки и документацию для установки пути URL-адреса в качестве источника

Смежные вопросы