Jquery ui自动完成 – 多个来源
对于1个源,这是ajax调用后的正确代码:url:“links2.xml”,
我希望源是多个xml文件。 如何包含额外路径?
谢谢。
首先, 文档说“Autocomplete插件希望该字符串指向将返回JSON数据的URL资源。” 注意:JSON,而不是XML,因此您需要在下面将xml转换为json。
xml到json可以在您的服务器上或客户端浏览器上完成。 如果可能的话,在服务器上执行一次会更快。
要使用多个源文件,您需要先在HTML / JS页面中加载多个文件。 然后将它们连接成一个Javascript数组,然后将数组提供给自动完成调用。
就像是:
# later... $( ".selector" ).autocomplete({source: myproject_choices });
甚至可以做这个fom jquery方面? 您可能需要“手动”加载和加入文件。
我可以通过编写自定义源函数来实现:
$("#elm").autocomplete({ source: function(request, response) { $.ajax({ url: "links1.xml", success: function(data) { // store data here $.ajax({ url: "links2.xml", success: function(data) { // combine data from first call with this call response(combineddata); } } }); }....
但我已经能够将这些文件组合在一些可能更适合的其他方面。
带自动完成function的Xml: http : //jqueryui.com/demos/autocomplete/#xml
我会把任务分成两部分
- 检索数据
- 填充自动填充
如果您能够从多个源加载数据并统一它们,则可以使用结果填充自动完成控件。 我建议你研究使用jQuery Deferred-objects(api.jquery.com/jQuery.Deferred)加载数据异步并等待所有调用返回并使用$.when(...).then(...)
使用结果$.when(...).then(...)
下面的例子来自写得很好且说得很好的网站: http : //www.danieldemmel.me/blog/2013/03/22/an-introduction-to-jquery-deferred-slash-promise/
function getReady(){ var deferredReady = $ .Deferred(); $(document).ready(function(){ deferredReady.resolve(); }); return deferredReady.promise(); } var firstRequest = $ .ajax({url:'http://www.html5rocks.com/en/tutorials/file/xhr2/'}); var secondRequest = $ .ajax({url:'http://www.html5rocks.com/en/tutorials/audio/scheduling/'}); $ .when(getReady(),firstRequest,secondRequest ).done(function(readyResponse,firstResponse,secondResponse){ var insertDiv1 = $('div>'); insertDiv1.html($(firstResponse [0])发现( '部分')的HTML()); var insertDiv2 = $('div>'); insertDiv2.html($(secondResponse [0])发现( '部分')的HTML()); $('body')。append(insertDiv1,'
',insertDiv2); });