我花了一天时间旋转我的车轮试图理解Rails:remote => true是如何工作的。下面的问题似乎很复杂,但我试图用我提供的信息来理解这个简单的问题:
如何在不使用的情况下进行简单呈现为JS的Ajax调用:remote => true? 根据我的理解:remote => true只是生成并处理一个AJAX调用:
我的观点如下:
.e_list = opts.sort_link(:name) = opts.sort_link(:description) - e_list.each do |e| .entry = link_to(e.name, '#', class: 'select_e', data: {e_id: e.id}) = e.description = paginate e_list, remote: true, params: {search:"j", com_id: com.id}
Gallery.js.erb
$('#com<%= @com.id %>').replaceWith('<%= escape_javascript render(partial: "shared/com", locals: {com: @com}) %>');
我的控制器:
def gallery
if params[:com_id]
@com = @s.com.find(params[:com_id])
@com.filter = params
end
if c = @s.com.where(:_type => "Com").first
@current_e = c.entries(@user.app_id).first
@current_e.og_url = view_context.og_url(@current_e)
end
render :text => "foobar" if !@current_e
end
日志,在用户点击分页链接或排序链接后(关键是那些链接有:remote =&gt; true)
Started GET "super long url" for 127.0.0.1 at 2012-05-04 16:08:42 -0700
Processing by CController#gallery as JS
所以我尝试用AJAX重新开始:
$('button.search').live 'click', (e) ->
search = $(e.target).attr('search-term')
success_callback = (results) ->
if results
console.log(results)
update_components(results[0].entry, '.entry')
else
$.ajax(
url: 'super long url that is exactly the same url as above!'
).done ->
return false
我失败的回应,不作为JS的转折,我想的是:remote =&gt; true只是一个ajax调用wtf?:
Started GET "super long url identical as the one that renders JS" for 127.0.0.1 at 2012-05-04 16:07:22 -0700
Processing by ContestController#gallery as */*
发生了什么事?如何在不使用:remote =&gt; true?
的情况下进行简单呈现为JS的Ajax调用答案 0 :(得分:1)
尝试
$.ajax({
url: 'your url',
dataType: 'script'
})
http://www.alfajango.com/blog/rails-3-remote-links-and-forms-data-type-with-jquery/
答案 1 :(得分:0)
你可以使用jQuery来完成你想要做的事情:
/* your jquery file */
jQuery.ajaxSetup({
'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
})
...
$('#button').click(function() {
$.post('/controller/action', {
query_string1: value1
});
});
答案 2 :(得分:0)
尝试
/screens/4fa02763dc1c82269c0001da/contest/gallery.js?app_row_id=5....
如果您希望响应中的js在浏览器中执行,您应该执行类似eval(响应)的操作,但我只是建议,我从来没有这样做,甚至知道如何评估字符串的代码的JavaScript。