简体   繁体   English

如何从事件ajax的响应中获取数据:Rails 5.1中的错误

[英]How to get data from response of event ajax:error in Rails 5.1

Iam building a form in Rails. 我在Rails中构建一个表单。 I want to submit it by ajax, so I setted remote: true 我想通过ajax提交它,所以我设置了remote: true

<%= form_for @post, html: { multipart: true }, remote: true  do |f| %>
    ...
<%= end %>

In my controller: 在我的控制器中:

def create
    @post = Post.new(post_param)

    respond_to do |format|
       if @post.save
          format.html { redirect_to @post, notice: 'Post was successfully created.' }
          format.json { render :show, status: :created, location: @post }
       else
          format.html { render json: @post.errors, status: 400 }
          format.json { render json: @post.errors, status: 400 }
      end
    end
end

In form on view 在视图中的形式

$('#new_post').on('ajax:success', function(data) {
    console.log(data);
}).on('ajax:error', function(evt, xhr, status, error) {
    console.log(xhr);
});

But in event 'ajax:error', I can't parse to get data about validation errors of post. 但是在'ajax:error'事件中,我无法解析获取有关post的验证错误的数据。 All params 'xhr', 'status', 'error' both equal undefined. 所有参数'xhr','status','error'都等于未定义。

How to parse response in 'ajax:error' to get data about validation errors ? 如何解析'ajax:error'中的响应以获取有关验证错误的数据?

Rails 5.1 introduced rails-ujs , which changes the parameters of these event handlers. Rails 5.1引入了rails-ujs ,它改变了这些事件处理程序的参数。 The following should work: 以下应该有效:

// ...
.on('ajax:error', function(event) {
    var detail = event.detail;
    var data = detail[0], status = detail[1],  xhr = detail[2];
    // ...
});

Source: http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html#rails-ujs-event-handlers 资料来源: http//edgeguides.rubyonrails.org/working_with_javascript_in_rails.html#rails-ujs-event-handlers

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM