使用方法对 link_to 的 ajax 请求:在禁用 javascript 的情况下放入 rails

Posted

技术标签:

【中文标题】使用方法对 link_to 的 ajax 请求:在禁用 javascript 的情况下放入 rails【英文标题】:ajax request on link_to with method :put in rails with javascript disabled 【发布时间】:2012-11-14 18:15:05 【问题描述】:

我有一个链接,它使用 put 方法在投票时发送 ajax 请求。它在启用 javascript 的情况下工作正常。所以当我禁用 javascript 时它会发送一个 get 请求。我什至尝试在 link_to 中使用方法 post 没有运气。任何帮助将不胜感激..

路线

resources :coupon_votes ,:only => [:voted_down,:voted_up] do 
  member do 
    put 'voted_up'
    put 'voted_down'    
  end
end

查看

link_to(image_tag("coupon/works_yes_icon.png",:alt => "Worked",:size =>"16x15"),voted_up_coupon_vote_path(object.id),:html => :remote => true, :method=>:put,:id => "voted_up_voted_up_#object.id",:class => "working")
link_to(image_tag("coupon/works_no_icon.png",:alt => "Did not work",:size => "16x15"),voted_down_coupon_vote_path(object.id),:remote => true, :method=>:put , :id => "voted_up_voted_down_#object.id",:class => "not_working"))

控制器

def voted_up
  comman_vote do 
    @coupon.vote_up(current_user)
  end
end

def voted_down
 comman_vote do 
  @coupon.vote_down(current_user)
 end
end



def comman_vote
  if current_user && current_user.active?
    yield       
  end
respond_to do |format|
  format.js render  "coupon_voted"
  format.html render :text => "Thanks for the vote! Please enable javascript to use all the features of the website."
end
end

def find_coupon
  return if !current_user
  @coupon=Coupon.find(params[:id])
end

更新

感谢大家的努力。我做了另一种方式,而不是在我在 javascript(application.js) 中所做的 link_to 中使用 remote true。

观看次数

link_to(image_tag("coupon/works_yes_icon.png",:alt => "Worked",:size => "16x15"), "#", :data => "source" => object.id ,:id => "voted_up_voted_up_#object.id",:class => "working")

应用程序.js

$(".working").click(function ()
var coupon_id = $(this).data('source');
var request = $.ajax(url: '/coupon_votes/' + coupon_id + '/voted_down',
  type: 'POST',
  dataType: 'script'
)
return false; 

);

【问题讨论】:

伙计,如果不启用 javascript,您将无法进行异步,您的调用本身是远程的,因此它必须需要 javascript 【参考方案1】:

问题不在于方法 (put),而在于调用本身是远程的。这意味着异步调用并需要 javascript。

【讨论】:

我们可以破解它,以便在启用和禁用 javascript 时它可以工作吗? 您可以使用noscript 标签来包装一个 real 链接(这将使您的用户在点击时进入另一个页面)并使用 css 隐藏您的其他链接并制作加载文档时使用 javascript 可见。

以上是关于使用方法对 link_to 的 ajax 请求:在禁用 javascript 的情况下放入 rails的主要内容,如果未能解决你的问题,请参考以下文章

Rails3 中的 Ajax 请求,无法正常工作

以远程格式提交嵌入式link_to远程导致表单ajax触发

Rails 3 - 链接/按钮运行 ajax 请求而不重定向

远程 link_to 请求的是 html 而不是 js

如何通过link_to传递一个post请求

Rails 3.2 `link_to`(在电子邮件中)与`method: :put`仍在产生GET请求