- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
改编this Railscast在我的应用程序中的显示页面上工作,搜索工作正常,但它不是即时的(奇怪的是,它也不是在 keyup 上,尽管它在提交时工作,我认为我没有编码)。
正如我在下面的更新中提到的,当我尝试通过将“remote: true”添加到 form_tag(与 RailsCast 不同)来解决问题时,搜索完全停止运行。知道发生了什么事吗?
index.html.erb
<%= form_tag @post, :method => 'get', :id => "posts_search", class: "search_form squeeze form-inline" do %>
<p>
<%= text_field_tag :search, params[:search],
placeholder: "Search titles:", id: "search_field" %>
<%= submit_tag "Search", name: nil, class: "btn squeeze search" %>
</p>
<div id="list"><%= render 'search' %></div>
<% end %>
_search.html.erb
<ul class="blog_links">
<% @posts.first(@link_num).each do |p| %>
<li class="total_hover">
<%= p.name %>
</li>
<% end %>
</ul>
index.js.erb
$("#list").html("<%= escape_javascript(render("search")) %>");
posts_controller.rb
def index
@posts = Post.search(params[:search]).reverse
respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
end
end
def search
@posts = Post.search(params[:search]).reverse
render json: { results: @posts }
end
post.rb
def self.search(search)
if search
where('name LIKE ?', "%#{search}%")
else
scoped
end
end
javascripts/posts.js.coffee
$ ->
$("#posts_search input").keyup ->
$.get $("#posts_search").attr("action"), $("#posts_search").serialize(), null, "script"
false
routes.rb
match '/search', to: 'posts#search'
编辑 -- 当我将“remote: true”添加到我的 form_tag 时,搜索完全停止工作。就像,它既不搜索 keyup 也不搜索提交。
不过,有趣的是,我的网络(在检查器中)似乎在我按下提交时(且仅当)发出 GET 请求。该请求包括我的搜索词,因此,例如,当我在名为“这是一个很长的帖子名称”(带有 slugged url)的帖子页面上搜索“long”时,请求是这样的:
http://localhost:3000/posts/this-is-a-really-long-post-title?utf8=%E2%9C%93&search=long
该 URL 实际上并未显示在 URL 栏中,但它存在于网络请求中。
编辑 -- 按照 Paulo 的建议将 remote:true 移动到我的 form_tag 中的正确位置。所以:
<%= form_tag @post, remote: true, method: 'get', id: "posts_search", class: "search_form squeeze form-inline" do %>
再一次,让 remote:true 停止一般的搜索功能。当我检查那个元素时,我得到了这个:
<form accept-charset="UTF-8" action="/posts/this-is-a-really-long-post-title" class="search_form squeeze form-inline" data-remote="true" id="posts_search" method="get">
“this-is-a-really-long-post-title”是我进行搜索的页面上的帖子标题。它也是 url 中的 slug。因此,我认为问题可能出在我在此标记中调用的操作上。建议使用“/posts”,但是 a) 我在节目中进行搜索,而不是在索引页上进行搜索,并且 b) 当我尝试使用“/posts”时,它会生成以下表单标签:
<form accept-charset="UTF-8" action="/posts" class="search_form squeeze form-inline" data-remote="true" id="posts_search" method="get">
当我按下搜索键时(在控制台检查器中)出现此错误(每当我在搜索框中键入时都会出现类似的错误,因此 keyup 正在运行)。
GET http://localhost:3000/posts?utf8=%E2%9C%93&search= 404 (Not Found) jquery.js:8476
send jquery.js:8476
jQuery.extend.ajax jquery.js:7931
$.rails.rails.ajax jquery_ujs.js:110
$.rails.rails.handleRemote jquery_ujs.js:175
(anonymous function) jquery_ujs.js:392
jQuery.event.dispatch jquery.js:3046
elemData.handle jquery.js:2722
编辑——如果我删除 remote:true,就像在 Railscast 中一样,并在路径中使用 @post,我会得到这种奇怪的行为组合:
同样,当我添加 remote:true 时,页面上什么也没有发生。
编辑 -- 如果我删除 posts.js.coffee 的内容,搜索执行完全相同。就像在 form_tag 中没有 remote:true 时它会起作用,但只有在按下提交时才会起作用。为什么它会忽略 .js.coffee 文件中发生的事情?
编辑以回应 JVNILL 的回答
我用 jvnill 建议的替换了 posts.js.coffee 中的代码。现在搜索根本不起作用,但似乎这是在 javascript 中调用的搜索函数没有做它的事情的结果,导致 preventDefault 调用似乎在工作,当我搜索时(这里,对于“真的”),浏览器似乎将我的按键作为参数发送:
Started GET "/archive?utf8=%E2%9C%93&search=rea&_=1362073395037" for 127.0.0.1 at 2013-02-28 09:43:17 -0800
Processing by PostsController#index as JS
Parameters: {"utf8"=>"✓", "search"=>"rea", "_"=>"1362073395037"}
Post Load (0.2ms) SELECT "posts".* FROM "posts" WHERE (name LIKE '%rea%')
Rendered posts/_search.html.erb (0.5ms)
Rendered posts/index.html.erb within layouts/application (1.8ms)
Rendered layouts/_shim.html.erb (0.0ms)
Rendered layouts/_header.html.erb (0.5ms)
Completed 200 OK in 23ms (Views: 21.5ms | ActiveRecord: 0.2ms)
Started GET "/archive?utf8=%E2%9C%93&search=real&_=1362073395038" for 127.0.0.1 at 2013-02-28 09:43:17 -0800
Processing by PostsController#index as JS
Parameters: {"utf8"=>"✓", "search"=>"real", "_"=>"1362073395038"}
Post Load (0.1ms) SELECT "posts".* FROM "posts" WHERE (name LIKE '%real%')
Rendered posts/_search.html.erb (0.6ms)
Rendered posts/index.html.erb within layouts/application (1.9ms)
Rendered layouts/_shim.html.erb (0.0ms)
Rendered layouts/_header.html.erb (0.4ms)
Completed 200 OK in 50ms (Views: 49.2ms | ActiveRecord: 0.1ms)
Started GET "/archive?utf8=%E2%9C%93&search=real&_=1362073395039" for 127.0.0.1 at 2013-02-28 09:43:17 -0800
Processing by PostsController#index as JS
Parameters: {"utf8"=>"✓", "search"=>"real", "_"=>"1362073395039"}
Post Load (0.1ms) SELECT "posts".* FROM "posts" WHERE (name LIKE '%real%')
Rendered posts/_search.html.erb (0.6ms)
Rendered posts/index.html.erb within layouts/application (2.0ms)
Rendered layouts/_shim.html.erb (0.0ms)
Rendered layouts/_header.html.erb (0.5ms)
Completed 200 OK in 17ms (Views: 16.1ms | ActiveRecord: 0.1ms)
Started GET "/archive?utf8=%E2%9C%93&search=reall&_=1362073395040" for 127.0.0.1 at 2013-02-28 09:43:17 -0800
Processing by PostsController#index as JS
Parameters: {"utf8"=>"✓", "search"=>"reall", "_"=>"1362073395040"}
Post Load (0.2ms) SELECT "posts".* FROM "posts" WHERE (name LIKE '%reall%')
Rendered posts/_search.html.erb (0.5ms)
Rendered posts/index.html.erb within layouts/application (1.8ms)
Rendered layouts/_shim.html.erb (0.0ms)
Rendered layouts/_header.html.erb (0.4ms)
Completed 200 OK in 16ms (Views: 15.2ms | ActiveRecord: 0.2ms)
Started GET "/archive?utf8=%E2%9C%93&search=reall&_=1362073395041" for 127.0.0.1 at 2013-02-28 09:43:17 -0800
Processing by PostsController#index as JS
Parameters: {"utf8"=>"✓", "search"=>"reall", "_"=>"1362073395041"}
Post Load (0.2ms) SELECT "posts".* FROM "posts" WHERE (name LIKE '%reall%')
Rendered posts/_search.html.erb (0.6ms)
最佳答案
我不完全确定我是否理解正确,但使用您的原始设置,您的搜索是否有效?您只想通过ajax 提交表单?另外你有一个延迟的搜索响应?我希望下面的代码可以解决这两个问题
@search = ->
$.get $('#posts_search').attr("action"), $("#posts_search").serialize(), null, "script"
$ ->
$('#posts_search input').keypress -> search()
$('#posts_search').submit (e) ->
e.preventDefault()
search()
您可以使用 keypress 而不是 keyup 或使用观察搜索字段变化的插件,例如 delayedObserver .您还需要观察何时提交表单并使用ajax而不是普通的表单提交
更新:刚刚注意到日志显示您将执行索引操作,它实际上正在呈现一个 html 模板,这意味着您没有 js 模板。所以将 show.js.erb
复制到 index.js.erb
。
更新:编辑索引操作。您需要添加的另一件事是 respond_to block 内的 format.js
行,因此它不会默认为 html。
def index
@posts = Post.search(params[:search]).reverse
respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
format.js
end
end
关于javascript - 无法 AJAXify 功能搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15035498/
所以我加载了最新的 jQuery。我已经加载了 Ajaxify。我给了链接 ajaxify 类和目标,但什么也没发生?我只是不知道该去哪里寻找了。有什么建议么? Here's the link wit
Ajaxify 只能实时工作吗?也就是说本地不行吗?我正在本地网站上工作,有一个基本的实现,它没有改变任何东西。 最佳答案 是的,Ajaxify也可以在本地工作。它只是一个基于 jQuery 的库。
目前正在使用 Ajaxify效果很好,但也许有人知道答案。 是否有我们可以使用的回调,而无需在脚本中输入特定需求? 我尝试四处寻找,但我很想在 ajax 方法完成后添加一些回调;或者更好的是,一个选项
我正在使用jQuery Ajaxify来调整我的表格。它具有与标准 $.ajax 函数相同的回调。我试图在提交表单之前添加一个标准的 Javascript confirm() 对话框。问题是,一旦您单
我使用本教程实现了一个星级评级系统 http://eighty-b.tumblr.com/post/1569674815/creating-an-ajaxified-star-rating-syste
我真的很喜欢 Ajax 使网络应用程序更像桌面应用程序的方式,但我担心高容量网站上的点击率。我现在正在开发一个基于 Intranet 的数据库应用程序,一次访问的人数不会超过 2-4 人。我正在使用
在我的应用程序中,我有几个带有许多选项的表单字段。我遇到的问题类似于this question :在每个页面加载时获取和解析所有选项的成本很高(Twig 一遍又一遍地呈现所有选项,而没有客户端缓存可能
改编this Railscast在我的应用程序中的显示页面上工作,搜索工作正常,但它不是即时的(奇怪的是,它也不是在 keyup 上,尽管它在提交时工作,我认为我没有编码)。 正如我在下面的更新中提到
是否有任何 javascript 插件/库/脚本可以将标准 PHP 转换为使用 ajax 调用而不是标准链接。 理想情况下,这将位于现有应用程序之上,并允许应用程序在禁用 javascript 时正常
因为我在 last question 上没有得到预期的答案我会尽量简化和缩小我的问题: How can I build a dropdown-menu that uses AJAX (no submi
我对 RenderAction() 函数的作用感到满意。但是,我想在部分渲染的操作中对数据的加载和存储进行ajaxify,以便一切都发生在一个页面中。 想象一下以下情况:我有一个文章详细信息 View
是否可以在不刷新页面的情况下加载所有带有“ajax”类的链接?应更改完整的正文内容、页面标题和 url,以便可以将其添加为书签。 最佳答案 $('a.blah').click(function(e){
我有一个奇怪的问题,我想不出解决办法。我已经编写了一些 Javascript 代码来通过 AJAX 调用加载一些内容,该调用也执行一些动画。为了使网站功能正常,我将 jQuery 与 History.
HTML: JS: $("div img").animate({opacity:.5}, 200); 此 js 在页面加载后运行良好。但不处理由 ajax 加载的内容。给出的js代码只是一个例子
我有一个可以从购物车中删除商品的链接,但当您单击该链接时,它会将您重定向到购物车,并且该商品现已被删除。是否可以做到这样,您仍然可以单击它,它仍然可以执行其操作,但不会更改页面(即,它不会将用户发送到
我在网上找到了以下脚本,可以让您的网站使用 AJAX 加载内容。 一切正常,但它也会重新加载我的音乐播放器,它在单击链接时必须保留。 // Ajaxify // v1.0.1 - 30 Septemb
我正在尝试在不使用 jQuery 插件的情况下 AJAXIFY 表单。实现这一目标的过程是什么?我有我的表格。我应该将操作设置为什么?标题脚本应该是什么?请记住,我不想使用任何插件。我只需要一个使用
我正在为 WordPress 创建自定义 woocommerce 集成主题。 我的顶部有一个 blob,显示购物车中的商品总数,我想使用 Jquery 更新此 blob(无需重新加载页面)我能够通过获
我有一个文本字段,用户可以在该字段下方写入短消息(如 g+ 或 fb 上的状态)我有一个列表,其中需要显示这些消息。当用户提交该消息时,它存储在数据库中,之后我刷新整个 View 。这就是我显示该列表
我有一个应用程序,其中我“推出了自己的”状态装置,其中包含一个大的隐藏表单。我会捕获某些点击事件,对表单进行更改,序列化数据,并使用 jQuery BBQ 插件推送它。 我从来都不明白我在做什么。它工
我是一名优秀的程序员,十分优秀!