*** 这不再维护了*** 我几年前开始了这个项目,但到目前为止已经发生了很多变化。此外,由于不同层之间的耦合以及旧技术(jQuery!),这不是一个可扩展的项目。非常感谢所有的支持,但不幸的是我必须存档这个项目:(
AJAX Live Search 是一个 jQuery 插件/PHP 搜索表单,可在您键入时搜索并显示结果,类似于 Google 自动完成功能。
在行动中检查一下。
IE 8+ ✔ | 铬 ✔ | 火狐浏览器✔ | 歌剧✔ | 野生动物园 ✔ |
感谢 BrowserStack 和 JetBrains 对这个项目的支持。
让index.php
中的当前示例正常工作(包括创建虚拟数据库和表)不应超过 7 分钟。但如果您需要将其集成到现有项目中,则需要更多时间。要实现这一点,假设您有此文本字段:
<input type="text" class='mySearch' id="ls_query" placeholder="Type to start searching ...">
将core
、 css
、 font
、 img
、 js
和templates
等文件夹复制到您的项目中。
在core/Config.template.php
中指定所需的配置,特别是数据库配置,并将该文件重命名为Config.php
。该文件包含 PHP 配置表中已解释的插件的所有后端设置。
在页面中包含js/ajaxlivesearch.min.js
或js/ajaxlivesearch.js
和css/ajaxlivesearch.min.css
或css/ajaxlivesearch.css
。
将core/AjaxProcessor.php
中Access-Control-Allow-Origin header
的 URL 更改为您的项目 URL。目前是https://ajaxlivesearch.com
。
确保core/Handler.php
和core/Config.php
包含在您的 (PHP) 页面中,并且文件的最顶部有这些行(检查index.php
):
use AjaxLiveSearchcoreConfig;
use AjaxLiveSearchcoreHandler;
if (session_id() == '') {
session_start();
}
$handler = new Handler();
$handler->getJavascriptAntiBot();
最后,将插件挂接到文本字段并传递所需的选项(loaded_at 和 token):
jQuery("#ls_query").ajaxlivesearch({ returned_at: , token: getToken() . "'"; ?>, max_input: , }); ````
如果需要,您还可以将其他参数发布到服务器。要实现此目的,您应该将data
属性添加到搜索输入:
<input type="text" class='mySearch' id="ls_query" placeholder="Type to start searching ..." data-additionalData="hello world!">
例如,在这种情况下,您可以像这样访问 PHP 中的数据属性:
// key is transformed to lowercase
$additionalData = $_POST['additionaldata'];
姓名 | 类型 | 必需的 | 描述 |
---|---|---|---|
加载时间 | 整数 | 是的 | 这用于防止机器人搜索。 |
代币 | 细绳 | 是的 | 这用于防止 CSRF 攻击。 |
网址 | 细绳 | 不 | 默认值:ajax/process_livesearch.php。 |
缓存 | 布尔值 | 不 | 这里指的是Ajax请求缓存。默认值:假 |
表单反机器人 | 细绳 | 不 | 默认值:ajaxlivesearch_guard |
滑动速度 | 细绳 | 不 | 默认值:快速 |
类型延迟 | 整数 | 不 | 默认值:350 |
最大输入 | 整数 | 不 | 默认值:20 |
搜索的最小字符数 | 整数 | 不 | 开始搜索的最小字符长度。默认值:0 |
页面范围 | 大批 | 不 | 默认值:[0, 5, 10] |
页面范围默认值 | 整数 | 不 | 默认值:5 |
form_anti_bot_class | 细绳 | 不 | 默认值:ls_anti_bot |
页脚类 | 细绳 | 不 | 默认值:ls_result_footer |
下一页类 | 细绳 | 不 | 默认值:ls_next_page |
前一页类 | 细绳 | 不 | 默认值:ls_previous_page |
页数限制 | 细绳 | 不 | 默认值:page_limit |
结果包装类 | 细绳 | 不 | 默认值:ls_result_div |
结果类 | 细绳 | 不 | 默认值:ls_result_main |
容器类 | 细绳 | 不 | 默认值:ls_container |
分页类 | 细绳 | 不 | 默认:分页 |
表单类 | 细绳 | 不 | 默认:搜索 |
类加载 | 细绳 | 不 | 默认值:ls_page_loaded_at |
令牌类 | 细绳 | 不 | 默认值:ls_token |
当前页面隐藏类 | 细绳 | 不 | 默认值:ls_current_page |
当前页面lbl类 | 细绳 | 不 | 默认值:ls_current_page_lbl |
最后一页lbl类 | 细绳 | 不 | 默认值:ls_last_page_lbl |
总页lbl类 | 细绳 | 不 | 默认值:ls_last_page_lbl |
页面范围类 | 细绳 | 不 | 默认值:ls_items_per_page |
导航类 | 细绳 | 不 | 默认:导航 |
箭头类 | 细绳 | 不 | 默认:箭头 |
姓名 |
---|
点击结果 |
结果输入 |
onAjaxComplete |
例子:
jQuery(".mySearch").ajaxlivesearch({
loaded_at: <?php echo time(); ?>,
token: <?php echo "'" . $handler->getToken() . "'"; ?>,
max_input: <?php echo Config::getConfig('maxInputLength'); ?>,
onResultClick: function(e, data) {
// get the index 1 (second column) value
var selectedOne = jQuery(data.selected).find('td').eq('1').text();
// set the input value
jQuery('#ls_query').val(selectedOne);
// hide the result
jQuery("#ls_query").trigger('ajaxlivesearch:hide_result');
},
onResultEnter: function(e, data) {
// do whatever you want
// jQuery("#ls_query").trigger('ajaxlivesearch:search', {query: 'test'});
},
onAjaxComplete: function(e, data) {
}
});
姓名 |
---|
ajaxlivesearch:隐藏结果 |
ajaxlivesearch:搜索 |
姓名 | 类型 | 必需的 | 描述 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
数据源 | 大批 | 是的 | 每个搜索文本字段的数据源。键指的是 HTML id 字段。目前支持 MySQL 和 mongoDB(这是测试版)。 MySQL数据源配置:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
反机器人 | 细绳 | 是的 | 这是一种安全技术,可防止那些不使用 JavaScript 的机器人提交表单。在此技术中,使用 jQuery 使用该值填充隐藏字段。它可以有任何值,但必须与传递给 jQuery 插件的“form_anti_bot”选项相同。默认情况下,它设置为“ajaxlivesearch_guard”。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
搜索开始时间偏移 | 整数 | 是的 | 这用于另一种针对机器人的安全技术。页面加载完成后,一些机器人会立即提交表单。然而,对于人类来说,填补一个领域需要更多的时间。默认情况下,此参数设置为 3 秒。不建议分配超过 3 秒。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
最大输入长度 | 整数 | 是的 | 这指定搜索字段中的最大字符长度。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
模板 | 细绳 | 是的 | 这指定位于模板文件夹中的模板名称 |
禁用 anti_bot 和 token 有什么风险?
form_anti_bot
是一个很好的安全功能,但删除它应该没问题。要实现此目的,您需要更改core/AjaxProcessor.php
中的validateRequest()
并删除$_POST['ls_anti_bot']
以及更改core/Handler.php
中的verifySessionValue($sessionParameter, $sessionValue)
。相反,删除token
允许任何人创建表单并使用您的服务器作为数据源,因此不建议这样做。目前,每次加载页面/搜索表单时,都会通过调用表单页面中的getToken()
生成一个新令牌(当前示例中为index.php
)。然后在搜索/向服务器发送新请求时使用verifySessionValue($sessionParameter, $sessionValue)
检查令牌和 anti_bot。如果这对您来说有点大材小用,请在getToken()
中为现有会话返回相同的令牌。
如何在结果中隐藏一列?
这可以在您的模板中实现。可以在templates/hiddenColumn.php
中找到示例
麻省理工学院许可证