2017-06-09 5 views
2

Ich habe alles auf dieser Website versucht und nichts funktioniert, ich möchte nur die Zustände aus einem JSON von einem Servlet generiert und dann die Daten auf einer Auswahlleiste mit angezeigt werden AJAX.Select2 nicht funktioniert, immer Anzeige "Keine Ergebnisse gefunden"

Aber ich bekomme nur eine "No results found" egal was ich auf der Auswahlleiste tippe.

Dies ist die Funktion, um die Dropdown-Liste zu füllen:

Hinweis:

@Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     String estados = new Gson().toJson(localizacionDao.getEstados()); 

     response.getWriter().write(estados); 

    } 

ich, dass das überprüft: formatRepo und formatRepoSelection sind bereits

$(document).ready(function() { 
    $(".js-data-example-ajax").select2({ 
    ajax: { 
     url: "/socialis/estadoController", 
     dataType: 'json', 
     delay: 250, 
     data: function(params) { 
     return { 
      q: params.term, // search term 
      page: params.page 
     }; 
     }, 
     processResults: function(data, params) { 
     // parse the results into the format expected by Select2 
     // since we are using custom formatting functions we do not need to 
     // alter the remote JSON data, except to indicate that infinite 
     // scrolling can be used 
     params.page = params.page || 1; 

     return { 
      results: data.items, 
      pagination: { 
      more: (params.page * 30) < data.total_count 
      } 
     }; 
     }, 
     cache: true 
    }, 
    escapeMarkup: function(markup) { 
     return markup; 
    }, // let our custom formatter work 
    minimumInputLength: 1, 
    templateResult: formatRepo, // omitted for brevity, see the source of this page 
    templateSelection: formatRepoSelection // omitted for brevity, see the source of this page 

    }); 
}); 

die Servlets doGet-Methode Dies ist hinzugefügt JSON wurde korrekt generiert, indem "estados" jedes Mal gedruckt wurde, wenn ich die Select-Leiste eintippte.

Vielen Dank im Voraus.

Antwort

2

Korrigiert:

Grundsätzlich ist das JSON-Format, das ich war falsch verwendete, das JSON-Format, das für mich gearbeitet wurde:

[{"id":7,"text":"Chiapas"},{"id":8,"text":"Chihuahua"}] 

Auch kleinere Änderungen an der Funktion Select2:

$(".js-data-example-ajax").select2({ 
     ajax: { 
      url: "/socialis/estadoController", 
      dataType: 'json', 
      type: "GET", 
      delay: 250, 
      data: function (params) { 
      return { 
       q: params.term, // search term 
       page: params.page 
      }; 
      }, 
      processResults: function (data, params) { 
      // parse the results into the format expected by Select2 
      // since we are using custom formatting functions we do not need to 
      // alter the remote JSON data, except to indicate that infinite 
      // scrolling can be used 
      params.page = params.page || 1; 

      return { 
       results: data, 
       pagination: { 
       more: (params.page * 30) < data.total_count 
       } 
      }; 
      }, 
      cache: true 
     }, 
     escapeMarkup: function (markup) { return markup; }, // let our custom formatter work 
     minimumInputLength: 1 

     }); 

Die Steuerung wurde ebenfalls geändert:

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    String searchTerm = request.getParameter("q"); 

    String estados = getOptions(searchTerm);    

    response.getWriter().write(estados); 

} 

Es ist sehr wichtig zu beachten, dass die Filterung der Ergebnisse serverseitig erfolgt. Grundsätzlich sendet Ajax bei jeder Eingabe in die Suchleiste eine Anfrage mit dem Suchbegriff "q".

in jeder Anfrage Also, die Funktion "getOptions" filtern Sie die Ergebnisse wie folgt aus:

public String getOptions(String q){ 
    List<Estados> estados = localizacionDao.getEstados(); 
    List<Estados> estadosFiltered = new ArrayList<>(); 
    for (Estados Estado : estados) { 
     if(Estado.getNombreEstado().contains(q)){ 
      estadosFiltered.add(Estado); 
     } 
    } 
    String estadosString = new Gson().toJson(estadosFiltered); 
    System.out.println(estados); 
    estadosString = estadosString.replace("idEstado", "id"); 
    estadosString = estadosString.replace("nombreEstado", "text"); 
    return estadosString; 
} 

Ich hoffe, diese Antwort hilft.

Verwandte Themen