Javascript 使用ajax更新Rails

Javascript 使用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

正在尝试使用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_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
这可能会有帮助