2013-05-04 98 views
0

我是rails新手。 我正在創建一個基本的rails-api。試圖將用戶添加到使用JS請求我的模型......向我的Rails API發送JS請求

這裏是我的HTML文件:(附加user.html)

<script type="text/javascript" charset="utf-8"> 
    $(function() { 
     $('#adduser').submit(function(e){ 
      $.post('http://localhost:3000/users', {user: {username: $("#usr").value}, user: {password:$("#psw").value}}); 
    }); 
    }); 
</script> 

<form id="adduser" data-ajax="false"> 
<input type="text" id="usr" placeholder="Username"/> 
<input type="password" id="psw" placeholder="Password"/> 
<input type="submit" value="Add User" id="usradd" name="login"/> 
</form> 

當我點擊提交,$。員額()簡單相加數據到我的網址... 的數據不會被添加到我的模型......

我users_controller代碼:

def new 
    @user = User.new 
    render json: @user 
end 

def create 
@user = User.new(params[:user]) 

if @user.save 
    render json: @user, status: :created, location: @user 
else 
    render json: @user.errors, status: :unprocessable_entity 
end 
end 

回答

0

試試這個:

<input type="text" id="usr" placeholder="Username"/> 
<input type="password" id="psw" placeholder="Password"/> 
<input type="button" value="Add User" id="usradd" name="login"/> 

$(function() { 
    $('#usradd').click(function(e){ 
     var user = { 
      username: $("#usr").val(), 
      password: $("#psw").val() 
     } 
     $.post('/users/create', user); 
    }); 
}); 

'/ users/create' - 我認爲它應該看起來像這樣,但它取決於你的路徑設置。要找出它使用rake:routes命令。

編輯:

你並不真的需要在這種情況下表單元素。

編輯#2: 如果在用戶創建後需要重定向,則根本不需要ajax。你應該使用form_for rails helper,它可以幫助你爲你的用戶模型構建一個表單。在這種情況下,您不需要任何JavaScript代碼。

+0

它仍然沒有工作.... 我已經把匹配所有可能的情況,即 匹配「缺省路由控制器(/:動作(/:ID) )(:格式)' 添加上面的代碼後,我將它轉到「http:// localhost:3000/add-user.html?login = Add + User」 另外我試過把這段代碼放在索引中。 html ...在這裏它不會重定向到任何地方...停留在同一頁面上... – 2013-05-04 22:03:33

+0

當然,它不會重定向,它是ajax,而不是bostback!您應該將.done(function(data){/ * callback body * /})添加到$ .post作爲參數。在數據中,您將看到新頁面或json對象(取決於您的控制器方法返回的內容)。然後,您可以重定向到您需要的頁面,或使用響應中的html更新頁面的一部分。 – 2013-05-05 08:22:14

+0

它的工作,但空值添加到我的模型...以下是代碼... – 2013-05-13 12:33:37

0

亞溫的答案應該能夠做到。我意識到你可能只是試圖讓這個工作,但想指出,你想避免在這樣的發佈請求中使用完整的網址。它不是必需的,當您將代碼遷移到舞臺和製作區域時,可能會引入更大的問題。

1

實際上,您不需要使用$ .post,因爲您可以通過在表單標記中指定操作url來提交表單。請檢查以下內容。

<form action="https://stackoverflow.com/users/create" method="post"> <input type="text" id="usr" placeholder="Username"/> <input type="password" id="psw" placeholder="Password"/> <input type="button" value="Add User" id="usradd" name="login"/> </form>

+0

嗨@sufinsha ...它的工作,但空值添加到我的模型...因此,我做了以下變化工作像< form action =「/ users/create」method =「post」> ...但下面的代碼也會將空值添加到我的模型中... $('#usradd')。click(function(e){ var用戶= {(「#usrname」)。val(), password:$(「#pswd」)。val() }; $。交( '/用戶/創建',用戶);} – 2013-05-13 12:30:33