16

Zastanawiam się nad przejściem od Wybranego do Select2, ponieważ Select2 ma natywne metody dla ajax. Ajax jest krytyczny, ponieważ zwykle musisz załadować wiele danych.Format JSON dla jquery-select2 multi z ajaxem

I wykonany pomyślnie przykład z JSON z api.rottentomatoes.com/api/

Zrobiłem plik JSON przetestować ajax, ale to nie działa.

Nie wiem, jak powinien wyglądać JSON. Wydaje się, że brak jest szczegółowa dokumentacja:

https://github.com/ivaynberg/select2/issues/920

Próbowałem unsucessfully kilka formatów JSON, więc starałem się skopiować format JSON podobną do api.rottentomatoes ale to nie działa.

Może brakuje mi czegoś głupiego.

function MultiAjaxAutoComplete(element, url) { 
    $(element).select2({ 
     placeholder: "Search for a movie", 
     minimumInputLength: 1, 
     multiple: true, 
     ajax: { 
      url: url, 
      dataType: 'jsonp', 
      data: function(term, page) { 

       return { 
        q: term, 
        page_limit: 10, 
        apikey: "z4vbb4bjmgsb7dy33kvux3ea" //my own apikey 
       }; 
      }, 
      results: function(data, page) { 
       return { 
        results: data.movies 
       }; 
      } 
     }, 
     formatResult: formatResult, 
     formatSelection: formatSelection, 
     /*initSelection: function(element, callback) { 
      var data = []; 
      $(element.val().split(",")).each(function(i) { 
       var item = this.split(':'); 
       data.push({ 
        id: item[0], 
        title: item[1] 
       }); 
      }); 
      //$(element).val(''); 
      callback(data); 
     }*/ 
    }); 
}; 

function formatResult(node) { 
    return '<div>' + node.id + '</div>'; 
}; 

function formatSelection(node) { 
    return node.id; 
}; 


/*MultiAjaxAutoComplete('#e6', 'http://api.rottentomatoes.com/api/public/v1.0/movies.json');*/ 

MultiAjaxAutoComplete('#e6', 'https://raw.github.com/katio/Quick-i18n/master/test.json'); 

$('#save').click(function() { 
    alert($('#e6').val()); 
}); 

Zrobiłem to jsfiddle:

http://jsfiddle.net/Katio/H9RZm/4/

+1

Dobre pytanie kolega, wybierz 2 docs sekcja ajax nie ma sensu do mnie, jestem pewien, że wielu będzie miało na to pytanie. –

Odpowiedz

31

Jeśli włączony do JSON upewnij się przełączyć typ danych do JSON z jsonp.

format jest określony tutaj: http://ivaynberg.github.io/select2/#doc-query

JSON powinna wyglądać następująco:

{results: [choice1, choice2, ...], more: true/false } 

Zasadniczo jedynym wymaganym atrybutem w wyborze jest id. jeśli opcja zawiera inne opcje podrzędne (takie jak w przypadku opcji podobnych do grupy optgroup), to są one określone w atrybucie children.

Domyślny wybór i wybór renderer oczekuje atrybut text w każdym wyborze - to, co jest używane do renderowania wyboru.

tak kompletnym przykładem państwo z nami za pomocą domyślnej renderujący może wyglądać następująco:

{ 
    "results": [ 
     { 
      "id": "CA", 
      "text": "California" 
     }, 
     { 
      "id": "CO", 
      "text": "Colarado" 
     } 
    ], 
    "more": false 
} 

Nadzieja ta zostanie uruchomiony.

+1

Dziękuję i gratulacje, Select2 jest naprawdę fajny. Brakowało mi parametru "more", jednak nie widzę więcej parametru w jsonie api.rottentomatoes. Jakikolwiek sposób, teraz działa dla mnie. Dziękuję za Twoją odpowiedź. –

+0

Kręciłem się w kółko od dokumentów Select2 do Google i wreszcie tutaj. Ta odpowiedź naprawdę mnie uratowała. Dlaczego nie masz szczegółowego dokumentu niż jednolinijkowe? nie mów, że masz jeden w sekcji dokumentacji, patrząc na to czułem się jak czytając rosyjski i nie ma sensu –

+2

Najwyraźniej w select2 4.0.0, domyślnym akceptowanym formatem jest teraz {results: [{id: 'CA', text: 'California'}, {id: 'CO', tekst: 'Colarado'], paginacja: {more: false}} (zwróć uwagę na atrybut paginacji) – personne3000