2013-04-19 19 views
11

Mam następujący kod, który należy Pobieranie danych za pośrednictwem AJAX przy użyciu select2Wybór2 nie pobieranie danych za pośrednictwem 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 
      }; 
     } 
    } 
}); 

Jeśli patrzę na żądanie za pomocą Web Inspector podczas poszukiwania „o” otrzymuję:

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

Jakieś pomysły, co robię źle? Zakładam, że coś nieprawidłowego w funkcji wyników.

Błąd pojawia się: Uncaught TypeError: Cannot call method 'toUpperCase' of undefined

+0

będzie można zmienić strukturę odpowiedzi json –

Odpowiedz

33

Spróbuj

$('#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 
      }; 
     } 
    } 
}); 

Demo: Plunker

+0

Jest to bardzo przydatna próbka. mój problem został rozwiązany po 4 godzinach szukania. dzięki –

4

Poza powyższym roztworze można zrobić jedną rzecz, zamiast wrócić następujący json

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

powrócić to

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

obliczu tego samego problemu i zorientowaliśmy się po obejrzeniu kilku rozwiązań proponowanych przez innych.

Powiązane problemy