Rails AJAX调用操作呈现视图两次

时间:2015-05-30 22:05:21

标签: jquery ruby-on-rails ajax

我的Rails应用程序中有一个用户注册表单。我没有使用标准的Rails表单,而是使用自定义的HTML表单。通过AJAX调用将数据传递给create中的UsersController操作。

这是我的表格:

<!-- Register Form -->
<div class="user_register">
 <form>
   <label><%= t(:full_name)%></label>
   <input type="text" id="name"/>
    <br />

    <label><%= t(:email_address)%></label>
    <input type="email" id="regmail"/>
    <br />

    <label><%= t(:password)%></label>
    <input type="password" id="regpassword"/>
    <br />

    <label><%= t(:password_again)%></label>
    <input type="password" id="password_confirm"/>
    <br />

    <input id="send_updates" type="checkbox" />
    <label for="send_updates">Send me occasional email updates</label>

    <div class="action_btns">
    <div class="one_half"><a href="#" class="btn back_btn"><i class="fa fa-angle-double-left"></i> <%= t(:Back)%></a></div>
    <div class="one_half last"><a href="#" id="register_button" register_url=<%= root_url+'/create_user' %> class="btn btn_red"><%= t(:sign_up)%></a></div>
    </div>
  </form>
</div>

<script type="text/javascript">

$( "#register_button" ).click(function() {
  var email = $('#regmail').val();
  var name = $('#name').val();
  var register_url = $('#register_button').attr('register_url');
  var password = $('#regpassword').val();
  var password_confirm = $('#password_confirm').val();

  jQuery.ajax({ 
    url: register_url, 
    type: 'POST', 
    data: {
      'user' : {
        'password': password,
        'password_confirmation': password_confirm,
        'name': name,
        'mail': email
      }
    },
    dataType: 'html',
    success: function() { window.location.reload(true); },
    beforeSend: function(xhr) { xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));},                           
  });
});

</script>

我控制器的代码是:

def create
  if params[:user][:password].eql?(params[:user][:password_confirmation])
    @user = User.new({:name=>params[:user][:name], :mail=>params[:user][:mail], :username=>params[:user][:username], :hashed_password=>Digest::SHA1.hexdigest(params[:user][:password])})

    respond_to do |format|
      if @user.save
        format.html { redirect_to root_url, notice: t(:congratulations_can_now_log_in) }
        format.json { render json: @user, status: :created, location: @user }
      else
        format.html { redirect_to root_url, notice: t(:error_while_registering) }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  else
    redirect_to :back, notice: t(:error_while_registering)
  end
end

AJAX调用create操作来创建新用户,该操作呈现视图。如果AJAX成功,则再次加载页面(success: function() { window.location.reload(true); })。因此,我获得了对同一URL的2次GET调用,第一次是动作,第二次是AJAX成功。

问题在于,如果第一个GET包含某些通知或警告,则无法查看这些通知或警报,作为第二个GET,删除它们(作为重新加载)。

我想做的是避免第二次GET调用(通过AJAX重新加载页面),但是当我插入一个空函数或者在成功选项中什么都不做的函数时,AJAX调用失败了。

我该怎么办?

0 个答案:

没有答案