我正在使用jQuery UI自动完成功能。我可以将其与jQuery UI提供的示例一起使用,如下所示:
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 });
这可以正常工作。但是我需要使用JSON作为数据源,可以像这样检索它:http://mysite.local/services/suggest.ashx?query = ball
如果要转到该URL,我将像这样返回JSON:
[{"id":12,"phrase":"Ball"},{"id":16,"phrase":"Football"},{"id":17,"phrase":"Softball"}]
如何使用我的URL作为数据源?
我试过像这样更改source-option:
$("#tags").autocomplete({ source: "http://mysite.local/services/suggest.ashx" });
但这没有帮助。我猜该服务不知道在输入字段中键入了哪个关键字左右?
任何指针都很棒。
您需要更改源来满足以下规范(该小部件的文档中已概述)。源必须是包含以下内容的数组(或返回包含以下内容的数组):
label
value
如果由于某种原因您无法更改远程源返回的内容,则可以在成功检索到数据后对其进行转换。这样做的方法如下:
$("#tags").autocomplete({ source: function (request, response) { $.ajax({ url: "http://mysite.local/services/suggest.ashx", data: { query: request.term }, success: function (data) { var transformed = $.map(data, function (el) { return { label: el.phrase, id: el.id }; }); response(transformed); }, error: function () { response([]); } }); }); });
如您所见,您需要通过将函数传递给source小部件的选项来进行AJAX调用。
source
这个想法是用来$.map将您的数组转换为包含自动完成小部件可以解析的元素的数组。
$.map
还要注意,data传递给AJAX调用的参数应该?query=<term>在用户键入术语时结束。
data
?query=<term>