2017-08-17 3 views
1

Ich erstellte eine Autocomplete-Funktion, wenn ich console.log zeigt mir alle meine Dateien, die in Remote-JSON-Datei ist, aber wenn ich versuche, es anzuzeigen, wenn ich Type auf Eingabe starten, tut es nicht zeige nichts, keine Fehler, aber es funktioniert überhaupt nicht. Auch möchte ich diese Mehrfachauswahl automatisch vervollständigen. Aber im Moment möchte ich nur Vorschläge anzeigen, wenn ich am Eingang tippe.Anzeige von Daten in Autocomplete jQuery UI

$(function() { 
    $("#city").autocomplete({ 
    source: function (request, response) { 
     $.ajax({ 
     url: $('#city').attr('data-source'), 
     success: function (data) { 
      for (var i = 0; i < data.length; i++) { 
      data[i].loc_name 
      } 
     } 
     }) 
    } 
    }) 
}) 

JSON

[{"population":1729119,"token":"167|7|179|1296|55544|0","loc_name":"Warszawa"},{"population":758463,"token":"167|6|135|976|7644|0","loc_name":"Krak\u00f3w"},{"population":718960,"token":"167|5|113|789|58247|25218","loc_name":"\u0141\u00f3d\u017a Teofil\u00f3w"},{"population":718960,"token":"167|5|113|789|58247|25340","loc_name":"\u0141\u00f3d\u017a G\u00f3rna"},{"population":718960,"token":"167|5|113|789|58247|25282","loc_name":"\u0141\u00f3d\u017a \u0141askowice"}] 

Antwort

2

Das Problem ist, weil Ihre AJAX Logik nicht ganz richtig ist. Sobald die AJAX vervollständigt müssen Sie die empfangenen Daten an den response Rückruf zur Verfügung zu stellen, wie folgt aus:

$("#city").autocomplete({ 
    source: function (request, response) { 
    $.ajax({ 
     url: $('#city').data('source'), 
     success: function(data) { 
     var output = data.map(function(o) { 
      return { 
      label: o.loc_name, 
      value: o.token 
      } 
     }); 
     response(output); 
     } 
    }) 
    } 
}) 

Dies wird unter der Annahme, dass das Format, dass data in das Format passt zurückgegeben wird, dass die automatische Vervollständigung erwartet. Wenn nicht, müssen Sie das Array ändern - am besten auf dem Server.

+0

Aber es funktioniert nicht für mich, mein JSON sieht so aus und ich möchte nur "loc_name" anzeigen, um auf Autocomplete anzuzeigen, aber nur "Token": '[{" Population ": 1729119," Token ": "167 | 7 | 179 | 1296 | 55544 | 0", "Lok_Name": "Warszawa"}, {"Population": 758463, "Token": "167 | 6 | 135 | 976 | 7644 | 0", "Lok_Name ":" Krak \ u00f3w "}, {" Population ": 718960," Token ":" 167 | 5 | 113 | 789 | 58247 | 25218 "," Lok_Name ":" \ u0026 \ u003e \ u00f3d \ u017a Teofil \ u00f3w "} ] ' –

+1

In diesem Fall müssen Sie das Format ändern, um ein Array von' {label: '', value: ''} 'Objekten zurückzugeben. Ich habe die Antwort für Sie aktualisiert, obwohl es auf der Serverseite wirklich besser wäre. Beachten Sie auch, dass ich die Eigenschaften angenommen habe, die Sie für das Label/den Wert verwenden möchten. Fühlen Sie sich frei, wenn nötig zu ändern. –

+0

Ich ändere nur meinen Code zu Ihrer Lösung, aber ich habe einen Fehler, der auf 'Label: o.loc_name, Wert: o.token' ist" unerwartetes Token: " –