jQuery UI-autocomplete mit JSON von URL
Bin ich mit dem jQuery-UI-Autocomplete-Funktion. Kann ich machen, damit es funktioniert mit den im Beispiel mit jQuery UI wie diese:
var availableTags = [
"ActionScript",
"AppleScript",
"Asp",
"BASIC",
"C",
"C++",
"Clojure",
"COBOL",
"ColdFusion",
"Erlang",
"Fortran",
"Groovy",
"Haskell",
"Java",
"JavaScript",
"Lisp",
"Perl",
"PHP",
"Python",
"Ruby",
"Scala",
"Scheme"
];
$("#tags").autocomplete({
source: availableTags
});
Dieses funktioniert ohne Probleme. Aber ich brauche für die Verwendung von JSON als meine Datenquelle, die abgerufen werden können, wie diese: http://mysite.local/services/suggest.ashx?query=ball
Wenn ich dabei bin, die URL bekomme ich JSON zurück wie diese:
[{"id":12,"phrase":"Ball"},{"id":16,"phrase":"Football"},{"id":17,"phrase":"Softball"}]
Wie kann ich meine URL als Datenquelle?
Ich habe versucht, die änderung der source-option wie folgt:
$("#tags").autocomplete({
source: "http://mysite.local/services/suggest.ashx"
});
Aber es hilft nicht. Ich denke, dass der service nicht weiß, welches keyword wurde in das Eingabefeld eingegeben oder so???
Jegliche Hinweise wäre toll.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie ändern Sie Ihre Quelle, um die den folgenden Spezifikationen entsprechen (wie in der Dokumentation für das widget). Die Quelle muss ein array (oder ein array zurückgeben mit):
label
Eigenschaft, einevalue
Eigenschaft, oder beides.Wenn aus irgendeinem Grund Sie nicht ändern können, was Ihre remote-Quelle zurückkehrt, können Sie die Daten transformieren, einmal hat es erfolgreich abgerufen. Hier ist, wie Sie das tun würden:
Wie Sie sehen können, den Sie brauchen, um den AJAX-Aufruf selbst, durch die übergabe einer Funktion an die
source
Möglichkeit, das widget.Die Idee ist,
$.map
verwandeln Sie Ihr array in ein array, das die Elemente enthält, die das autocomplete-widget analysieren kann.Beachten Sie auch, dass die
data
parameter, der an die AJAX-Aufruf sollte am Ende als?query=<term>
wenn der Benutzer einen Begriff.query
Ihr code wird ähnlich Aussehen wie die oben, außer Sie werden einfach anrufenresponse(data)
imsuccess
handler. In anderen Worten, da ändern Sie die Standard-AJAX-request stattfindet, werden Sie noch haben, es selbst zu tun.request.term
ist der Begriff, den der user gesucht.