Kim*_*sen 8 jquery json jquery-ui autocomplete jquery-ui-autocomplete
我正在使用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
});
Run Code Online (Sandbox Code Playgroud)
这没有任何问题.但我需要使用JSON作为我的数据源,可以像这样检索:http://mysite.local/services/suggest.ashx?query = ball
如果我要去那个URL,我会像这样得到JSON:
[{"id":12,"phrase":"Ball"},{"id":16,"phrase":"Football"},{"id":17,"phrase":"Softball"}]
Run Code Online (Sandbox Code Playgroud)
如何使用我的URL作为数据源?
我试过像这样更改source-option:
$("#tags").autocomplete({
source: "http://mysite.local/services/suggest.ashx"
});
Run Code Online (Sandbox Code Playgroud)
但它没有帮助.我猜这个服务不知道在输入字段中输入了哪个关键字?
任何指针都会很棒.
And*_*ker 12
您需要更改源以满足以下规范(在小部件的文档中概述).源必须是包含(或返回包含数组)的数组:
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([]);
}
});
});
});
Run Code Online (Sandbox Code Playgroud)
如您所见,您需要通过将函数传递给source窗口小部件的选项来自己进行AJAX调用.
我们的想法是使用$.map将数组转换为包含自动完成小部件可以解析的元素的数组.
另请注意,data传递给AJAX调用的参数应该?query=<term>在用户键入术语时结束.
| 归档时间: |
|
| 查看次数: |
19171 次 |
| 最近记录: |