向我的Rails API发送JS请求
我是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
试试这个:
<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代码。
亚温的答案应该能够做到。我意识到你可能只是试图让这个工作,但想指出,你想避免在这样的发布请求中使用完整的网址。它不是必需的,当您将代码迁移到舞台和制作区域时,可能会引入更大的问题。
实际上,您不需要使用$ .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>
嗨@sufinsha ...它的工作,但空值添加到我的模型...因此,我做了以下变化工作像 ...但下面的代码也会将空值添加到我的模型中... $('#usradd')。click(function(e){ var用户= {(“#usrname”)。val(), password:$(“#pswd”)。val() }; $。交( '/用户/创建',用户);} – 2013-05-13 12:30:33
它仍然没有工作.... 我已经把匹配所有可能的情况,即 匹配“缺省路由控制器(/:动作(/:ID) )(:格式)' 添加上面的代码后,我将它转到“http:// localhost:3000/add-user.html?login = Add + User” 另外我试过把这段代码放在索引中。 html ...在这里它不会重定向到任何地方...停留在同一页面上... – 2013-05-04 22:03:33
当然,它不会重定向,它是ajax,而不是bostback!您应该将.done(function(data){/ * callback body * /})添加到$ .post作为参数。在数据中,您将看到新页面或json对象(取决于您的控制器方法返回的内容)。然后,您可以重定向到您需要的页面,或使用响应中的html更新页面的一部分。 – 2013-05-05 08:22:14
它的工作,但空值添加到我的模型...以下是代码... – 2013-05-13 12:33:37