`
sunfengcheng
  • 浏览: 183872 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

实现实时的搜索

阅读更多
[size=large][/size][color=green]实现实时的搜索
a live search

如果你想着在你的页面进行实时的搜索--就是到你在输入不同关键字的时候,查询的解果将发生变化。

使用 rails 的ajax 辅助方法 创建一个实时 搜索
  数据库的迁移
db/migrate/001_create_books.rb:

class CreateBooks < ActiveRecord::Migration
  def self.up
    create_table :books do |t|
      t.column :title, :string
    end

    Book.create :title => 'Perl Best Practices'
    Book.create :title => 'Learning Python'
    Book.create :title => 'Unix in a Nutshell'
    Book.create :title => 'Classic Shell Scripting'
    Book.create :title => 'Photoshop Elements 3: The Missing Manual'
    Book.create :title => 'Linux Network Administrator's Guide'
    Book.create :title => 'C++ Cookbook'
    Book.create :title => 'UML 2.0 in a Nutshell'
    Book.create :title => 'Home Networking: The Missing Manual'
    Book.create :title => 'AI for Game Developers'
    Book.create :title => 'JavaServer Faces'
    Book.create :title => 'Astronomy Hacks'
    Book.create :title => 'Understanding the Linux Kernel'
    Book.create :title => 'XML Pocket Reference'
    Book.create :title => 'Understanding Linux Network Internals'
  end

  def self.down
    drop_table :books
  end
end

接着,使用   script.aculo.us and Prototype
包含到布局中去。
app/views/layouts/books.rhtml:

<html>
  <head>
    <title>Books</title>
    <%= javascript_include_tag :defaults %>
  </head>
  <body>
    <%= yield  %>
  </body>
</html


创建包含index and search 方法的控制器。 search方法对从index视图发过来的ajax调用做出响应。
app/controllers/books_controller.rb:

class BooksController < ApplicationController

  def index
  end

  def get_results
    if request.xhr?
      if params['search_text'].strip.length > 0
        terms = params['search_text'].split.collect do |word|  
          "%#{word.downcase}%" 
        end     
        @books = Book.find(
          :all,   
          :conditions => [
            ( ["(LOWER(title) LIKE ?)"] * terms.size ).join(" AND "),
            * terms.flatten
          ]       
        )       
      end     
      render :partial => "search" 
    else    
      redirect_to :action => "index" 
    end
  end
end


index.rhtml  视图显示了查询字段,并使用observe_field 这一JavaScript 辅助方法在字段中定义一个观察者。 
app/views/books/index.rhtml:

<h1>Books</h1>

Search: <input type="text" id="search_form" name="search" />

<img id="spinner" src="/images/indicator.gif" style="display: none;" />  

<div id="results"></div>

<%= observe_field 'search_form',
  :frequency => 0.5, 
  :update => 'results',
  :url => { :controller => 'books', :action=> 'get_results' },
  :with => "'search_text=' + escape(value)",
  :loading => "document.getElementById('spinner').style.display='inline'",
  :loaded => "document.getElementById('spinner').style.display='none'" %>


最后,创建一个局部模版, 将查询结果显示为一个书本标题列表。
app/views/books/_search.rhtml:

<% if @books %>
  <ul>
    <% for book in @books %>
      <li>    
        <%= h(book.title) %>
      </li>   
    <% end %>
  </ul>
<% end %>
[/color]
3
3
分享到:
评论

相关推荐

    虚拟数据实现实时搜索

    在IT行业中,虚拟数据实现实时搜索是一种提升用户体验和数据处理效率的重要技术。它结合了前端和后端的先进技术,如PHP、jQuery和Ajax,来创建一个动态且响应迅速的搜索功能。以下是对这一主题的详细说明: 1. **...

    使用PHP和Ajax实现实时搜索

    使用PHP和Ajax实现实时搜索 一、 开发环境 1、环境搭建:Windows 7+Apache 2.4.18+MySQL 5.7.11+PHP 7.1.0。 2、文本编辑器:Sublime 3。 二、主要技术 本案例主要通过PHP读取XML文件,同时结合Ajax无刷新技术来实现...

    使用PHP和Ajax实现实时搜索1

    在本文中,我们将探讨如何使用PHP和Ajax技术来实现实时搜索功能。实时搜索允许用户在输入关键词时,无需刷新页面即可获取相关结果,从而提供流畅的用户体验。以下是实现这一功能的主要步骤和相关知识点: 1. **开发...

    JavaScript实现前端实时搜索功能

    - `oninput`事件:在输入框内容改变时即时触发,适合实现实时搜索功能。 - `onchange`事件:在元素失去焦点且内容发生变化时才触发,不适合实时搜索。 - `onkeydown/onkeypress/onkeyup`事件:这几个键盘事件可以...

    Android实现实时搜索框功能

    用于实现允许用户输入一定字符后,显示一个下拉菜单,供用户从中选择,当用户选择某个选项后,按用户选择自动填写该文本框。 该组件继承EditText,所以它支持EditText组件提供的属性,同时,该组件该支持如下功能。...

    搜索功能select下拉框实现自动匹配

    带搜索功能的select下拉框,类似百度google的搜索框,自己匹配,很好用

    js实现带搜索功能的下拉框实时搜索实时匹配

    1. 当select输入框中每输入一点内容的时候,在option中找出与内容匹配的选项显示在option的前面选项中。 2. 如何获取每次输入的内容,当keyup的时候触发函数。 问题:select标签中可以输入内容吗?...

    EditText实现搜索功能

    本文将详细介绍如何利用EditText和PopupWindow来实现搜索功能,并结合TextWatcher监听器实现实时搜索。 首先,我们了解EditText。EditText是Android中的一个视图类,继承自TextView,用于接收用户输入的文本。它...

    实时搜索技术

    - **HotelSearchPriceCrawlService**:实现实时房价和房态的抓取。 服务之间通过HTTP或RPC进行通信,利用Nginx+QunarClient或Dubbo实现通信。此外,还采用了Zookeeper、ngx-healthcheck等工具来实现可用性和负载...

    js实现带搜索功能的下拉框

    通过遍历所有`&lt;option&gt;`元素并检查它们的文本是否包含关键词,我们可以实现实时搜索。 然而,纯JS实现的下拉框可能在视觉效果上不尽人意。这时,可以引入jQuery下拉框美化插件,例如`select2`。`select2`不仅提供...

    jQuery自定义实时搜索插件.zip

    HideSeek插件的核心功能是实现实时搜索,这意味着用户在输入框中输入文字时,页面上的内容会即时根据输入进行过滤和高亮显示。这在大型数据集或者目录型网站中非常实用,因为它帮助用户快速找到他们想要的信息。高亮...

    函数节流和函数防抖(键盘输入完成触发搜索).rar

    节流保证一段时间内只执行一次核心代码,防抖其实就是搜索功能的实现。。。。滚动浏览器滚动条的时候,更新页面上的某些布局内容或者去调用后台的某接口查询内容。同样的,如果不对函数调用的频率加以限制的话,那么...

    AJAX技术在Web应用中的研究与实现.pdf

    * 实时搜索引擎:基于AJAX技术的搜索引擎可以实现实时搜索、自动完成等功能。 * 电子商务平台:基于AJAX技术的电子商务平台可以实现实时价格更新、库存查询等功能。 * 社交媒体:基于AJAX技术的社交媒体可以实现实时...

    Android调用系统的浮动搜索框实现搜索功能

    6. **优化用户体验**:为了提供更好的体验,你还可以实现`SearchView.OnQueryTextListener`,监听用户在搜索框中的输入,实现实时搜索建议: ```java searchView.setOnQueryTextListener(new SearchView....

    jquery-live-search:一个简单、轻量级的jQuery插件,用于实现实时搜索

    一个简单、轻量级的 jQuery 插件,用于实现实时搜索。 要求: 简单使用 $ . liveSearch ( { selectorContainer : "ul" , selectorElementsToSearch : "li" , attributeToSearch : false , selectorInputSearch...

    实时搜索引擎源码LUCENE

    在“实时搜索引擎源码LUCENE”这个主题中,我们将深入探讨LUCENE如何实现实时搜索,并结合集群和负载均衡的实现方式。 1. **LUCENE实时搜索** LUCENE的核心特性之一就是支持实时搜索。这意味着当新的文档被添加到...

    jQuery实时搜索插件-HideSeek

    HideSeek插件正是基于jQuery库构建的,它的核心功能在于实现实时搜索。当用户在搜索框中输入关键词时,插件会立即对页面中的内容进行过滤,隐藏不匹配的结果,展示与搜索词相匹配的元素。这种实时反馈机制大大提高了...

    winform文本框实现百度效果以及搜索记忆功能

    百度搜索框的特点在于它不仅提供自动补全,还有实时搜索结果预览。在Winform中,可以监听`TextBox`的`TextChanged`事件,一旦用户输入内容发生变化,就发起一个异步请求(如使用`HttpClient`),获取搜索结果。这些...

Global site tag (gtag.js) - Google Analytics