2013-04-19 10 views
11

ho il seguente codice che deve essere sempre i dati tramite la tecnologia AJAX utilizzando Select2Select2 non ricevendo dati tramite la tecnologia 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 
      }; 
     } 
    } 
}); 

Se guardo la richiesta utilizzando Web Inspector durante la ricerca 'O' ottengo:

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

Qualche idea su cosa sto facendo male? Presumerei qualcosa di sbagliato nella funzione risultati.

L'errore che ottengo è: Uncaught TypeError: Cannot call method 'toUpperCase' of undefined

+0

sarai in grado di modificare la struttura di risposta JSON –

risposta

33

Prova

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

Questo è un esempio molto utile. il mio problema è stato risolto dopo 4 ore di ricerca. Grazie –

4

Oltre soluzione di cui sopra si può fare una cosa, invece di tornare in seguito JSON

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

restituire questo

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

affrontato lo stesso problema e capito questo dopo aver guardato alcune soluzioni proposte da altri.

Problemi correlati