2013-04-19 5 views
11

У меня есть следующий код, который должен получать данные через AJAX с помощью ВЫБ.2Выбор2 не получает данные через AJAX

$('#Organisation').select2({ 
    ajax: { 
     url: AppURL + 'Organisations/Manage/SearchByName/', 
     dataType: 'json', 
     quietMillis: 100, 
     data: function (term) { 
      return { 
       term: term 
      }; 
     }, 
     results: function (data) { 
      return { 
       results: data 
      }; 
     } 
    } 
}); 

Если я смотрю на запрос с помощью веб-инспектор при поиске «O» я получаю:

[{"label":"Organisation 1","ID":2},{"label":"Organisation 2","ID":1}] 

Любые идеи, что я делаю неправильно? Я бы предположил что-то неправильное в функции результатов.

Ошибки я получаю: Uncaught TypeError: Cannot call method 'toUpperCase' of undefined

+0

Вы сможете изменить структуру ответа json –

ответ

33

Попробуйте

$('#Organisation').select2({ 
    ajax: { 
     url: 'data.json', 
     dataType: 'json', 
     quietMillis: 100, 
     data: function (term) { 
      return { 
       term: term 
      }; 
     }, 
     results: function (data) { 
      var results = []; 
      $.each(data, function(index, item){ 
      results.push({ 
       id: item.ID, 
       text: item.label 
      }); 
      }); 
      return { 
       results: results 
      }; 
     } 
    } 
}); 

Демо: Plunker

+0

Это очень полезный образец. моя проблема решена после 4 часов поиска. благодаря –

4

Кроме выше решение, которое вы можете сделать одну вещь, вместо того, чтобы вернуться следующий JSON

[{"label":"Organisation 1","ID":2},{"label":"Organisation 2","ID":1}]

вернуть этот

[{"text":"Organisation 1","id":2},{"text":"Organisation 2","id":1}]

столкнулись с той же проблемой и понял это после того, как смотреть на несколько решений, предложенных другими.

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