rails中發送ajax請求


最近在寫一個blog系統練練手,遇到一個一個問題,用戶添加評論的時候想發送ajax請求,但是rails里的ajax和Python中的不太一樣,Python中的ajax是用js,jquery實現的和rails不太一樣,在此記錄一下,研究了好久終於弄明白了一點

 

告訴框架我們要發送ajax請求

rails這個框架吧,ajax與后端結合的非常緊密。

當我們想發送一個ajax請求的時候,在模板生成的時候我們可以添加一個屬性

form表單, <%= form_for (Comment.new), url: post_comments_path(@post),remote:true do |f| %> 當我加上remote:true時那么就會發送ajax請求了。

a標簽 也是一樣  <%= link_to 'ajax-request', '/xxxx/create', remote: true%> 這樣也就可以發送ajax請求了。

 

為什么我們這么一設置就可以發送ajax請求了呢。因為rails內部使用了?

Rails 使用一種叫做 Unobtrusive JavaScript(UJS) 的方式來掛載內建的 JavaScript 功能,也就是你在 app/assets/javascripts/application.js 里面加載的 //= require jquery_ujs,這些功能包括

  • 讓超連結可以用 :method 參數支援非 GET 方法
  • 用超連結、按鈕和表單可以用 :remote => true 支援 Ajax
  • 超連結、按鈕和表單可以用 "data-confirm" 參數可以跳確認對話視窗
  • 送出按鈕可以用 data-disable-with 參數在送出表單時暫時關閉按鈕避免重復送出

 

這里我也遇到了一個問題當我直接發送的時候,服務器告訴我沒有csrf token驗證

這里我們需要在模板中加上 <%= csrf_meta_tags %> 這樣就不會出錯了

 

Ajax請求的過程

1.當我們點擊發送ajax請求的時候,會到相應的控制器中。比如我這里到了cmment控制器中。

comments_conttroller.rb

class CommentsController < ApplicationController

  def create
    pp params
    @post = Post.where(id: params[:post_id]).first
    @comment = Comment.new(user_id: current_user.id, post_id: params[:post_id], content: params[:comment][:content])

    respond_to do |format|
      if @comment.save
        format.html          # 里面是要生成的html代碼,就是我在頁面上要添加的 
        format.js              #執行的js代碼 文件名和方法名一致,例如我這個是create.js.erb
        format.json {render json: @comment}
      end
    end
  end

  private
    def comment_params
      params.require(:comment).permit(:content)
    end
end

respond_to do |format| "https://api.rubyonrails.org/classes/ActionController/MimeResponds.html"可以到該網站去查看用法

主要就是看返回什么我們這里是ajax請求那么返回的就是format.js

2. 到了相應的create.js.erb中

$("#comment_content").append("<%= escape_javascript(render 'create') %>")
<%= escape_javascript(render 'create') %>  

 這里回去找相對應的模板 我這里render 'create' 那么他就回去找(因為我這里是comments下,回在comments目錄下找)_create.html.erb。

 

這樣就可以發送ajax請求了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM