向我的Rails API发出JS请求

时间:2013-05-04 15:40:01

标签: javascript ruby-on-rails json api rails-api

我是铁杆新手。 我正在创建一个基本的rails-api。尝试使用JS请求将用户添加到我的模型...

这是我的HTML文件:(add-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>

当我点击提交时,$ .post()只是将数据添加到我的网址... 数据没有添加到我的模型......

我的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

3 个答案:

答案 0 :(得分:1)

实际上您不需要使用$ .post,因为您可以通过在表单标记本身中指定操作URL来提交表单。请检查以下内容。

  

<form action="/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>

答案 1 :(得分: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代码。

答案 2 :(得分:0)

Yauhen的答案应该可以解决问题。我意识到你可能只是试图让它工作,但是想指出你想避免在这样的帖子请求中使用完整的URL。它不是必需的,并且在将代码迁移到登台和生产区域时可能会引入更大的问题。