2012-12-17 109 views
1

我一直在嘗試很多東西,我無法解決這個問題。 首先,我有一個花式框內的部分形式。Rails關閉ajax請求上的fancybox

是這樣的:* _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; 
}); 

的問題是,我得到IAM在fancybox時沒有任何反饋。 如果我檢查控制檯是否有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 

如何關閉的fancybox響應是否等於2? 我怎麼才能向用戶顯示他們的輸入在fancybox裏面是不正確的?

回答

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 %> 

這是一個基本的方法。如果在創建失敗時想要其他行爲,請擴展您的代碼。

+0

也許我誤以爲fancybox的dom_id。找出另一個,如果它不工作。 ) –

+0

謝謝!這工作太btw:渲染:js =>「$ .fancybox.close();」 –