2016-06-13 16 views
1

Ich versuche, JQuery Autocomplete-Funktion mit einem Ajax-Aufruf darin verwenden, die die Liste der Strings..Wenn ich versuche zu tippen, es zeigt alle die Liste der Strings und nicht filtern basierend auf dem input..Not sicher, wo ich gehe wrong..Below meine Funktion zur automatischen Vervollständigung ist ..jquery Autocomplete - nicht Filterung

$("#domainNameId").autocomplete({ 
     source : function(request, response) { 
      console.log("in ajax "); 
      $.ajax({ 
       url : "getAllDomains", 
       type : "GET", 
       contentType : "application/json", 
       data : { 
        env : $("#environment").val() 
       }, 
       dataType : "json", 
       success : function(data) { 
        response(data); // list of strings.. 
       }, 
       error : function(x, t, m) { 
        console.trace(); 
        if (!(console == 'undefined')) { 
         console.log("ERROR: " + x + t + m); 
        } 
        console.log(" At the end"); 
       } 
      }); 

     }, 
    }); 

die Hilfe zu schätzen wissen ..

Antwort

2

Ihr Back-End scheint immer die gesamten Daten zurückzugeben und keine Filterung (Der Dienstname selbst ist getAllDomains). In diesem Fall ist es nicht erforderlich, die Funktionsform der Quellenoption zu verwenden, um AJAX-Aufrufe auszuführen.

Sie senden mehrere AJAX-Anforderungen an den Server, wenn der Benutzer eingibt. Wenn Ihr Backend immer dieselben Daten zurückgibt, ist es nicht sinnvoll, mehrere Anfragen an es zu senden. Sie können die Daten einfach einmal abrufen und dann die Autovervollständigung mit der Antwort als Quelle initialisieren. Anschließend führt das Widget die Filterung als Benutzertypen durch.

Die docs sagt:

Eine Antwort Rückruf, die ein einziges Argument erwartet: die Daten an die Nutzer suggerieren. Diese Daten sollten basierend auf dem bereitgestellten Begriff gefiltert werden.

Wenn Ihr Server die Filterung nicht durchführt, verwenden Sie das Funktionsformular nicht, um AJAX-Anforderungen zu stellen.

so etwas wie:

$(function() { 
    // make a one-time request 
    $.ajax({ 
    url: "getAllDomains", 
    type: "GET", 
    contentType: "application/json", 
    dataType: "json", 
    success: function(data) { 
     // init the widget with response data and let it do the filtering 
     $("#domainNameId").autocomplete({ 
     source: data 
     }); 
    }, 
    error: function(x, t, m) { 
     console.trace(); 
     if (!(console == 'undefined')) { 
     console.log("ERROR: " + x + t + m); 
     } 
     console.log(" At the end"); 
    } 
    }); 

}); 
+0

ja ... Ich gebe alle Domains vom Server zurück ... habe die Änderungen gemacht, wie du gesagt hast, es funktioniert. Danke T J .. –

0

im success Rückruf, müssen Sie die filtern data selbst mit der request.term an die source Funktion übergeben.

Es gibt weitere Informationen zur jQuery Autocomplete source hier: https://api.jqueryui.com/autocomplete/#option-source.

+0

Dies ist eine schlechte Idee ... Filterung ist eine Funktion in das Widget selbst gebaut. Es macht keinen Sinn, mehrere Ajax-Aufrufe durchzuführen, wenn der Server die Filterung nicht durchführt. –