# [Ruby On Rails]簡易ajax POST範例(使用jQuery) ###### tags: `Ruby On Rails` >記得先引用jquery ## 產生controller terminal ```terminal rails g controller users ``` ## 產生model terminal ```terminal rails g model User name:string mail:string phone:string ``` ## 建立資料表 terminal (rails 4) ```terminal rake db:migrate ``` (rails 5) ```terminal rails db:migrate ``` ## Route routes ```rust get 'users/new' post 'users/create' ``` ## View views/users/new.html.erb ```rust= <form> name<input type="text" id="name"><br> email<input type="text" id="mail"><br> phone<input type="text" id="phone"><br> <button onclick="createNewUser()">submit</button> </form> <script> function createNewUser(){ //需加上這句以避免form進行自動提交 event.preventDefault(); $.ajax({ url: "/users/create", type: "POST", contentType: 'application/json', dataType: "json", data:JSON.stringify({ user:{ "name":$("#name").val(), "mail":$("#mail").val(), "phone":$("#phone").val(), } }), success: function(data) { console.log("success!!"); console.log(data); }, error: function(err) { console.log("ERROR!!!"); console.log(err.status); console.log(err); } }); } </script> ``` ## Controller controllers/users_controller ```ruby= class UsersController < ApplicationController def create @user = User.new(user_params) if @user.save render json: {"result": "success"} else render json: {"result": "fail"} end end private def user_params params.require(:user).permit(:name,:mail,:phone) end end ``` >這邊要注意的是, >因為view的js ajax有加上dataType: "json", >所以,若controller回傳的資料不是json格式的話, >會被jq ajax判定為error而落到js的error block內, >導致明明有成功post卻在console印出"ERROR!!!"的情形發生. > >(參考以下連結說明:) >https://stackoverflow.com/questions/6186770/ajax-request-returns-200-ok-but-an-error-event-is-fired-instead-of-success