重溫一遍rails中ajax的操做

rails.js是rails處理ajax的核心代碼,它其實就作兩件事情:javascript

  1. 在rails.js的代碼中,會去尋找頁面中的links、forms和inputs,若是這些元素帶有data-remote=true,那麼就給其綁定新的Ajax提交或者點擊事件。
  2. 當點擊完成後,Ajax請求發出,而後就觸發四個js自定義事件,你能夠經過這些事件來處理ajax響應

具體開發的時候,也很是簡單(以form_for爲例):html

  1. 在本來的form_for加上:remote => true,這樣就會在生成的html代碼上加上data-remote=true。java

  2. Ajax不只須要編寫客戶端代碼,服務器端也要作處理,服務端返回什麼類型的數據,這個能夠經過在form_for上加上"data-type" => 'json',固然若是不添加,默認是js,示例以下:jquery

    # app/controllers/users_controller.rb
    # ......
    def create
      @user = User.new(params[:user])
    
      respond_to do |format|
        if @user.save
          format.html { redirect_to @user, notice: 'User was successfully created.' }
          format.js   {}
          format.json { render json: @user, status: :created, location: @user }
        else
          format.html { render action: "new" }
          format.json { render json: @user.errors, status: :unprocessable_entity }
        end
      end
    end
3. 接下來就有兩種方式,第一種,返回html片斷或者json,在頁面添加自定義事件處理代碼,讓js完成頁面的更新:
    
    ```
    $(document).ready ->
      $("#new_user").on("ajax:success", (e, data, status, xhr) ->
        $("#new_user").append xhr.responseText
      ).on "ajax:error", (e, xhr, status, error) ->
        $("#new_user").append "<p>ERROR</p>"
  1. 第二種,返回的是一段js,客戶端加載並執行這段js,這個js是由js.erb文件生成的,在js.erb中咱們寫上處理頁面更新的代碼,這種方式和第一種相比,代碼更輕鬆簡單:ajax

    $("<%= escape_javascript(render @user) %>").appendTo("#users");
###更詳細:
http://guides.ruby-china.org/working_with_javascript_in_rails.html  
https://www.alfajango.com/blog/rails-3-remote-links-and-forms  
https://www.alfajango.com/blog/rails-3-remote-links-and-forms-data-type-with-jquery  
http://blog.madebydna.com/all/code/2011/12/05/ajax-in-rails-3.html
相關文章
相關標籤/搜索