Javascript 使用ajax更新Rails
正在尝试使用ajax更新帖子 posts\u controller.rbJavascript 使用ajax更新Rails,javascript,ruby-on-rails,ajax,Javascript,Ruby On Rails,Ajax,正在尝试使用ajax更新帖子 posts\u controller.rb def update if @post.update_attributes(post_params) flash[:notice] = 'Post updated!' redirect_to @post else flash[:alert] = 'Something wrong' render :edit end end application.js $('.simple_fo
def update
if @post.update_attributes(post_params)
flash[:notice] = 'Post updated!'
redirect_to @post
else
flash[:alert] = 'Something wrong'
render :edit
end
end
application.js
$('.simple_form.edit_post').submit('submit', function (e) {
e.preventDefault();
form = $(this).serialize();
$.ajax({
type: 'POST',
action: $(this).attr('action'),
data: form,
dataType: 'JSON'
}).done(function (data) {
alert(data.notice);
}).fail(function (data) {
alert(data.alert);
});
});
当我尝试更新时,我在Chrome控制台页面中发现错误,未找到和警报输出未定义首先,你应该发出
PUT
/补丁
请求,而不是POST
请求,因为你正在进行更新
您还应该在ajax请求中指定url
$('.simple_form.edit_post').submit('submit', function (e) {
e.preventDefault();
form = $(this).serialize();
$.ajax({
type: 'PATCH',
url: '/posts',
data: form,
dataType: 'JSON'
}).done(function (data) {
alert(data.notice);
}).fail(function (data) {
alert(data.alert);
});
});
此外,在控制器中,您应该能够以json
格式响应ajax请求
def update
if updated = @post.update(post_params)
flash[:notice] = 'Post updated!'
else
flash[:alert] = 'Something wrong'
end
respond_to do |format|
format.html { updated ? redirect_to @post : render :edit }
format.json { render json: flash.to_hash }
end
end
这可能会有帮助