Rails ajax 回调后link_to远程
Rails ajax callback after link_to remote
我正在尝试找出这个ajax回调业务,但没有任何运气让它工作。我已经看过大量的SO问题,教程等,但显然不明白这是如何工作的。我正在尝试更新包含部分的div 的内容。这是一个标准的类似/不像类型函数,用户将单击链接,它应该通过 ajax 更新图标。我的 ajax 远程请求工作正常,但我无法让回调工作。这是我show.html.erb
文件:
<table class="v-table">
<tr>
<td>
<div class="favorite">
<%= render 'vendors/favorite' %>
</div>
</td>
<td><h2><%= image_tag @vendor.image_url %></h2></td>
<td><%= @vendor.address %></td>
</tr>
</table>
以下是部分favorite
:
<% if current_user.voted_for?(@vendor) %>
<%= link_to image_tag("Heart (2).png"),
{ :controller => :vendors,
:action => 'vote_against_vendor', :vendor_id => @vendor.id},
{ :method => 'delete', :remote => true }%>
<% else %>
<%= link_to image_tag("Heart (1).png"),
{ :controller => :vendors,
:action => 'vote_for_vendor', :vendor_id => @vendor.id},
{ :method => 'post', :remote => true} %>
<% end %>
以下是我的相关控制器操作:
respond_to :js
def show
@vendor = Vendor.find_by_id(params[:id])
end
def vote_for_vendor
vendor = Vendor.find(params[:vendor_id])
current_user.vote_for(vendor)
render :toggle
end
def vote_against_vendor
vendor = Vendor.find(params[:vendor_id])
current_user.unvote_for(vendor)
render :toggle
end
我的切换.js.erb 文件:
$("#favorite").html("<%= escape_javascript render('favorite') %>");
我真的很陌生使用 js 和 ajax,请帮忙!提前谢谢。
错误日志
正确提交远程事务后,出现此错误:
Rendered vendors/_favorite.html.erb (1.3ms)
Rendered vendors/toggle.js.erb (2.6ms)
Completed 500 Internal Server Error in 47ms
ActionView::Template::Error (Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id):
1: <% if current_user.voted_for?(@vendor) %>
2: <%= link_to image_tag("Heart (2).png"),
3: { :controller => :vendors,
4: :action => 'vote_against_vendor', :vendor_id => @vendor.id},
app/views/vendors/_favorite.html.erb:1:in `_app_views_vendors__favorite_html_erb___385976980778737159_2184308220'
app/views/vendors/toggle.js.erb:1:in `_app_views_vendors_toggle_js_erb___3800164439665893406_2169792040'
app/controllers/vendors_controller.rb:39:in `vote_for_vendor'
Rendered /Users/User/.rvm/gems/ruby-2.0.0-p195/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.7ms)
Rendered /Users/User/.rvm/gems/ruby-2.0.0-p195/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.3ms)
Rendered /Users/User/.rvm/gems/ruby-2.0.0-p195/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (11.1ms)
不确定这意味着什么:ActionView::Template::Error (Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id):
好的,您需要将模型分配给控制器中不是local
变量的instance
。
@vendor = Vendor.find(params[:vendor_id])
其余的对我来说看起来不错。
不确定,但我想您可能在切换.js.erb 文件中缺少渲染"供应商/收藏夹"。其他一切对我来说似乎都很好。
Ajax 是向服务器发送请求并通过多个命令获得响应的客户端方式。你应该在客户端进行调用(所以主要是用javascript或客户端语言编写代码)。
不要忘记 ajax 默认情况下是异步的(您可以更改它 - 第一次尝试时不会重新推荐。实际上,当您将请求发送到服务器时,您会转到代码的下一行,并且响应不是像往常程序那样在预期时间收到的)。
这是一个微小的代码:
var tout;
....
function checkAjax() {
'use strict';
var xmlhttp;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
if (tout) {
clearTimeout(tout);
}
// do something
}
};
function ajaxTimeout() {
xmlhttp.abort();
// write error to client
}
clearTimeout(tout); // if tout is global.
tout = setTimeout(function () {
ajaxTimeout();
}, 10000); // 10 seconds, or what you persume to be fine.
xmlhttp.open("POST", "test.php", true); // it can be "GET" or aspx, or whatever.
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("");
}
祝你好运!!!
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 从远程脚本获取用户IP
- 三星智能电视应用程序;Brightcove示例应用程序远程控制问题
- Twilio-显示所有连接参与者的远程参与者视频
- jQuery AJAX write to XML
- grep in JQuery to C#
- 角度p2p视频聊天-远程流是黑视频
- how to convert html <div> to pdf
- 通过iframe登录到远程站点
- Node.js - POST to iFrame?
- Sencha Touch和远程服务器上的身份验证
- SVG xml to image
- 如何远程检查JavaScript应用程序的函数调用堆栈
- Advantages to DOMParser vs template & innerHTML
- how to split a string with ','
- How to declare a Map containing certain properties with flow
- jQuery:使用“jQuery验证”后无法提交表单's远程验证
- css是从远程node.js添加的,但不适用于html页面
- Php variable obj to js
- 如何在submit to sightly时将表单输入值作为参数传递给WCMUsePojo