簡體   English   中英

在Ruby on Rails中使用AJAX和Javascript響應

[英]Working with AJAX and Javascript responses in Ruby on Rails

使用JQuery使用AJAX和Ruby on Rails時遇到一些麻煩。 我試圖在JQuery中使用AJAX方法,對它執行GET請求,然后將響應傳輸到Ruby中,以便可以在控制器和視圖中使用它。 這是我想在視圖底部運行的腳本:

function onClick() {
  $.ajax({
    url: "/posts.json",
    type: "GET",
    success: function(response) {
      return response;
    }
  });
};

onClick();

有什么方法可以將響應轉換為紅寶石,這樣就可以在控制器中使用它了嗎? 我希望“響應”是AJAX請求返回的內容:

def index
  @response = response
end

提前致謝!

您正在混合應用程序的前端后端 您的JavaScript代碼位於前端,該前端實際上在訪問者的瀏覽器中運行; 而Rails控制器位於后端,后端在Web服務器上運行得很遠。 可以在它們之間來回發送數據,但是僅作為請求生命周期的一部分,我將其總結為:

  1. 訪問者請求加載您的網頁。
  2. 您的服務器和Rails收到請求,並決定如何將其路由控制器
  3. 您的控制器處理請求,執行處理,然后 視圖 呈現為HTML(或JSON,或您想發送回的任何格式)。
  4. 該HTML(或JSON)作為響應發送回訪問者。 此響應也包含您的所有JavaScript代碼(實際上,您的JS代碼通常是在單獨的請求中發送的,由訪問者的瀏覽器並行發出……但最終都在訪問者的瀏覽器中)。

因此,您要的-進行JavaScript調用將其數據發送到控制器-不可能在一個請求中完成。 您可以讓JavaScript通過請求將數據發送到控制器,但訪問者看不到。

相反,我認為您只想讓您的控制器發出此Web請求,或者-因為請求仍然在同一台服務器上-讓您的控制器簡單地加載數據庫中的所有Post並將該數據發送到視圖。 例如:

# app/controllers/things_controller.rb
class ThingsController
  def index
    @posts_json = Posts.all.to_json
  end
end

然后,通過視圖中的小腳本將該變量傳遞到JavaScript中(這有些棘手;您需要告訴Rails可以按原樣打印JSON字符串,而無需對其進行消毒):

# app/views/things/index.html.erb
<h1> Posts! </h1>
<script type='text/javascript'>
  var posts = <%=raw @posts_json %>;
  alert("I've got " + posts.length + " posts loaded.");
</script>

以上是一個相當標准的策略。 希望這個解釋有所幫助!

暫無
暫無

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

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