1

我一直在尝试很多东西,但我无法解决这个问题。首先,我在花式框中有一个部分表单。

这是:*_form.html.erb*

 <%= form_tag sessions_path , remote:true , id: "login_form" do %>
 <div class="field">
  <%= label_tag :email %>
  <%= text_field_tag :email, params[:email] %>
 </div>
 <div class="field">
  <%= label_tag :password %>
  <%= password_field_tag :password %>
 </div>
  <div class="actions"><%= submit_tag "Inloggen" %></div>
 <% end %>

我使用 application.js 中的 jQuery 函数在此表单中发布数据

jQuery('#login_button').fancybox({
  type: 'ajax'
})


jQuery('#login_form').submit(function() {  
    var data = jQuery(this).serialize();

        $.getJSON('sessions/new.js?callback=?&variable=loginData', { 
        loginData: data 
        }, function(data) {

            if(data == 0){
                alert('Your account is not activated yet');
            }
            if(data == 1){
                alert('Password incorrect');
            }
            // login correct
            if(data == 2){
                 //$.fancybox.close();
                 window.parent.jQuery.fn.fancybox.close();
            } 
        });

    return false;
});

问题是当我在幻想箱中时我没有得到任何反馈。如果我检查控制台是否有 XHR 请求,它会发送数据并且我会得到适当的响应,但 fancybox 不会关闭并且我没有收到任何警报。

最后但并非最不重要的是我的会话控制器

  def create
@user = User.find_by_email(params[:email])

#if there is a user with that e-mail, is it activated?
if @user
  if @user.user_level != '1' 
    @response = 1
  end
end

#check the login information with has_secure_password, user has to be activated
if @user && @user.authenticate(params[:password]) && @user.user_level == '1'
  session[:user_id] = @user.id
  @response = 2
else
  @response = 0
end

respond_to do |format|
  format.json { render :json => @response }
end

如果响应等于 2,我如何关闭花式框?以及我如何向用户展示他们的输入在幻想框内不正确?

4

1 回答 1

1
respond_to do |format|
  format.js do
    if @response == 2
      render :js => "$('#fancybox-content').remove();"
    end
  end
end

或者创建 create.js.erb:

# controller
respond_to do |format|
  format.js { }
end

# create.js.erb

<% if @response == 2 %>
  $('#fancybox-content').remove();
<% end %>

这是一种基本方法。如果您在创建失败时想要其他行为,请扩展您的代码。

于 2012-12-17T11:45:17.213 回答