使用静态json文件作为源的jQuery UI自动完成
我正在使用jquery-ui-autocomplete (实际上,一个catcomplete附加到搜索框)。 只要我使用静态定义的项目数组作为源,它就可以很好地工作。
出于性能原因,我不希望自动完成function将Ajax请求发送到PHP脚本,这样就可以向MySQL发送%like请求。 所以, 我从DB生成了一个JSON文件 ,其中包含了搜索中可以匹配的每个项目(大约20-30项,来自许多sql表)。 当页面加载或用户开始在搜索框中输入时,我只想读取/解析文件一次。
我被困在这里。 我试图将Ajax调用附加到.catcomplete()(下面的代码)。 我还尝试进行getJSON调用并在其success()方法中创建.catcomplete。 两种方式都无声地失败。
我是JS / jQuery的新手,我已经喜欢它,但我有点迷失了。 任何有用的doc的帮助/解决方案/指针都将非常感激。
非常感谢你!
这是HTML :(真正的简单)
这是我的JS代码:
$( "#searchfield" ).catcomplete({ delay: 0, source: function( request, response ) { $.ajax({ url: "/path/to/cache.json", dataType: "json", data: {term: request.term}, success: function(data) { response($.map(data, function(item) { return { label: item.label, category: item.category, desc: item.desc }; })); } }); }, minlength:0 });
示例JSON数据:
[ { label: "lbl1", category: "cat1", desc: "desc1"}, { label: "lbl2", category: "cat1", desc: "desc2"}, { label: "lbl3", category: "cat1"} ]
您的数据源抛出一个解析错误,因为json格式不是propper,在json中键也必须包含在"
。
{ "list" : [{ "label" : "lbl1", "category" : "cat1", "desc" : "desc1" }, { "label" : "lbl2", "category" : "cat1", "desc" : "desc2" }, { "label" : "lbl3", "category" : "cat1" }] }
演示: Plunker
如果您想要基于请求期限的搜索,那么您将不得不进行一些更改
var xhr; $( "input" ).catcomplete({ delay: 0, source: function( request, response ) { var regex = new RegExp(request.term, 'i'); if(xhr){ xhr.abort(); } xhr = $.ajax({ url: "data.json", dataType: "json", cache: false, success: function(data) { response($.map(data.list, function(item) { if(regex.test(item.label)){ return { label: item.label, category: item.category, desc: item.desc }; } })); } }); }, minlength:0 });
演示: Plunker
尝试翻转它,所以在页面加载时你抓住它一次,然后实例化自动完成。
$(function() { $.ajax({ url: "/path/to/cache.json", dataType: "json", data: {term: request.term}, success: function(data) { var cat_data = $.map(data, function(item) { return { label: item.label, category: item.category, desc: item.desc }; }); $("#searchfield").catcomplete({ delay: 0, source: cat_data, minlength:0 }); } }); });