在实际应用上,我们的数据源并不是一成不变的。大多数情况下,我们的数据都保存在数据库中,此时,我们就需要使用autocomplete通过AJAX请求获取远程数据作为数据源。
$("#language").autocomplete({ source: "public.php" });对应的 ajax-actions.php 的服务器页面代码如下:
<?php header('Content-Type:text/html;charset=UTF-8'); //为了方便举例,这里使用数组来模拟,你也可以在实际应用中从数据库中读取数据 //返回的数据最好是数组或对象类型的JSON格式字符串 $languages = array('Chinese', 'English', 'Spanish', 'Russian', 'French', 'Japanese', 'Korean', 'German'); echo json_encode($languages); ?>此时,我们再次访问该页面,我们仍然可以看到自动完成的输入效果。
从远程服务器获取数据的自动完成功能
注意:细心的读者可能已经注意到了,不管是从js数组中获取数据,还是从后台服务器获取数据,我们的数据并没有发生变化;但是,我们在从后台获取数据的页面输入"c"时,显示了所有的数据项,而不是如之前一样只显示筛选过滤之后的"Chinese"和"French"。这是因为,当我们从远程请求获取数据时,Autocomplete认为服务器已经进行了过滤处理,返回的数据都是直接可用的,无需再过滤。
在发送AJAX请求时,Autocomplete会把当前输入框中的文字以默认参数名term的形式追加到我们设置的URL地址后面。当我们输入一个c时,Autocomplete实际发送的请求路径为/ajax-actions.php?term=c。
在上面的实例中,由于我们使用的是php数组来模拟服务器返回的数据,没有根据用户的输入来返回对应的数据,才会导致上述结果。如果在实际应用中,使用类似如下SQL语句来查询数据,则不会存在该问题。
<?php // 注意:对于用户输入一般需要进行额外的安全处理 $term = $_GET['term']; $sql = "select column1 as label, column2 as value, ... from table1 where column1 like '$term%'"; $languages = query($sql); echo json_encode($languages); ?>此外,有些时候我们需要根据用户的输入或其他操作来构造不同的请求URL,我们可以为source指定函数。Autocomplete将用户输入交给该函数,该函数可以进行任何处理,然后把通过任何方式获得的数据交给Autocomplete处理即可。
$("#language").autocomplete({ // 通过函数来获取并处理数据源 source: function(request, response){ // request对象只有一个term属性,对应用户输入的文本 // response是一个函数,在你自行处理并获取数据后,将JSON数据交给该函数处理,以便于autocomplete根据数据显示列表 // 自行处理并获取数据... var dataObj = [...]; // 表示处理后的JSON数据 response(dataObj); // 最后将数据交给autocomplete去展示 } });运行代码
在上面的讲解中,我们介绍了autocomplete的必需参数选项source。除此之外,还有许多的参数选项可以给我们提供更加强大的其他辅助功能。请参考以下文章:
15 0
我们认为:用户的主要目的,是为了获取有用的信息,而不是来点击广告的。因此本站将竭力做好内容,并将广告和内容进行分离,确保所有广告不会影响到用户的正常阅读体验。用户仅凭个人意愿和兴趣爱好点击广告。
我们坚信:只有给用户带来价值,用户才会给我们以回报。