我的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调用失败了。
我该怎么办?