簡體   English   中英

Ruby / Rails / AJAX / JQuery-在鏈接單擊時,傳遞參數並執行控制器操作

[英]Ruby/Rails/AJAX/JQuery - On link click, passing a parameter and performing a controller action

我試圖使用單擊鏈接在我的控制器中執行和操作,稱為“是”,但這樣做是在客戶端,而不是每次用戶單擊時都刷新。

在我將link_to路由到名為“ yes”的動作並傳遞模型ID之前,我將其稱為“事件”

      <%= link_to "yes", yes_path(event)%>   (in view)

      match 'user/:id/yes' => 'user#yes', :as => "yes"   {in routes.rb)

問題問題在於,每當用戶單擊鏈接時,頁面就會在執行“是”操作時刷新,因此如果我能告訴后端執行客戶端操作,頁面將更加流暢。

S0我在這里找到了參考: 從rails3中的javascript執行控制器/動作

並查看了文檔: http : //api.jquery.com/jQuery.ajax/

並提出了這一點。 如果帖子在上方的上一條路線上發布成功,請更改鏈接的CSS類(更改顏色)。

 $.ajax({
       type: "POST",
       url: "/user/" + $(this).attr('event') + "/yes/",
       success: function(){
           $(".like").click(function() {
           if ($(this).hasClass("selected")) {
           $(this).addClass("selected");
           return false;  } 
    });

我還添加了這是正在使用所需javascript的控制器的底部。

respond_to do |format|
     format.html { }
     format.js
end

所以現在我的link_to看起來像這樣

 <%= link_to "yes", yes_path(event), :class => "like", :remote => true %>

但是該頁面仍然令人耳目一新,它看起來根本沒有調用AJAX。

  • 我是否正確地將參數“ event”作為jquery屬性傳遞?
  • 我是否正確調用link_to? 這是我的第一次,所以我不知道自己在做什么錯,可能是幾件事?

我真的很感謝任何幫助

這是你所追求的嗎?

$(".like").click(function(evt) {
    evt.preventDefault();

    var $self = $(this);
    $.post($self.attr("href"), function(response) {
        $self.addClass("selected");
    });
});

第一行將JavaScript綁定到具有like類的所有元素。 preventDefault是防止錨標記的默認行為(導航到href)的首選方法。 $.post()$.ajax({ type: "POST" })簡寫。

成功發布到服務器后,無論您要發生什么,都將執行該最終函數調用。 第一個參數是服務器的響應。

豐富

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM