2013-03-05 4 views
9

Ich bin neu bei Select2 und habe Probleme bei der Integration von AJAX. Wenn ich suche, werden die Ergebnisse nicht basierend auf der Abfrage gefiltert.Select2 Ajax filtert keine Ergebnisse basierend auf Abfrage

So sieht es aus: http://i.imgur.com/dAPSSDH.png - Die richtigen Zeichen sind in den Ergebnissen unterstrichen, aber nichts wird herausgefiltert. In meinem nicht-ajax Select2 und in den Beispielen, die ich gesehen habe, scheint die Filterung etwas automatisch zu geschehen, deshalb zögere ich, einen benutzerdefinierten Filter zu schreiben, da wahrscheinlich bereits ein besserer eingebaut ist.

Hier ist mein Code:

<script> 
    $("#search_bar").select2({ 
    placeholder: "Search for another Concept", 
    minimumInputLength: 1, 
    ajax: { // instead of writing the function to execute the request we use Select2's convenient helper 
     url: "/concepts/names_for_search", 
     dataType: 'json', 
     data: function (term, page) { 
     return { 
     q: term, // search term 
     page: page 
     }; 
     }, 
     results: function (data, page) { 
     return { results: data}; 
     } 
    }, 
    }); 
</script> 

Auch hier ist ein Beispiel für meine JSON:

[{"id":1,"text":"Limits"},{"id":2,"text":"Derivatives"},{"id":3,"text":"One-Sided Limits"},{"id":4,"text":"Formal Definition of a limit"}] 

Irgendwelche Ideen? Hoffentlich mache ich nur etwas Dummes und es ist eine schnelle Lösung. Vielen Dank im Voraus für jede Hilfe.

+1

auch ich mag es ein besserer Weg, dies zu tun war! Ich finde es nicht intuitiv, zum Server zu gehen, nur um zu filtern, wenn ich alle Reihen schon bei mir habe! –

Antwort

9

Sie müssen einen benutzerdefinierten Filter auf der Serverseite schreiben, um die Ergebnisse zu filtern. Was Sie in das Feld eingeben, wird in 'term' gespeichert und dann wird 'q' als Anforderungsparameter mit dem Ajax-Aufruf gesendet. Also der Ajax-Aufruf an
url: "/ Konzepte/Namen_für_Suche? Q = Deri"
sollte nur die gefilterten Ergebnisse und nicht alle Ergebnisse zurückgeben.

aktualisiert
Select2 wird in dem Suchfeld eingeben macht jedes Mal, wenn Sie eine Ajax-Aufruf. Sie müssen die Ergebnisse serverseitig filtern und dann die Ergebnisse basierend auf dem Text im Suchfeld zurückgeben.
Ich benutze es in meinem JSP/Servlet-Anwendung, wie unten

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    String searchTerm = request.getParameter("q"); 

    String json = getOptions(searchTerm); 
    //getOptions method will return a string of in JSON format 
    //[{"id":"1","name":"Derivatives"}] 
    response.getWriter().write(json); 
} 

Ihr JavaScript-Code korrekt ist.

Ich fand, dass Select2 verwendet wird. Wenn Sie die Verknüpfung http://www.indiewebseries.com/search?q=ind und http://www.indiewebseries.com/search?q=in öffnen, sind die Ergebnisse unterschiedlich und basieren auf dem Parameter 'q'.
Während Sie Fall werden die Ergebnisse für Anrufe mit url ‚/ Konzepte/names_for_search? Q = d‘ und ‚/ Konzepte/names_for_search? Q = deri‘ gleich (dh nicht gefiltert)

+0

Hey Danke und Entschuldigung diese Antwort ist so spät. Gibt es eine Möglichkeit, ihren Filter einfach so zu verwenden, als würde ich nicht AJAX machen (vielleicht aus dem Quellcode kopieren/einfügen)? Kennst du auch Beispiele, auf die du mich hinweisen kannst? Light-Googeln ist erstaunlich wenig aufgetaucht. Vielen Dank für Ihre Hilfe - sobald ich in der Lage bin, die Leute zu verbessern, werden Sie definitiv einen bekommen. –

+1

@MichaelNomitch - Ich habe die Antwort aktualisiert. Hoffe das hilft. – darsheets

2

Diese Frage gestellt wurde auf dem GitHub-Projekt und die Antwort war: Filter auf der Serverseite. Die Standard genannt Filterfunktion, wenn AJAX nicht verwendet wird, ist in der Select2-Dokumentation auf den matcher Parametern:

function(term, text) { return text.toUpperCase().indexOf(term.toUpperCase())>=0; }