Я пробовал много вещей, и я не могу решить эту проблему. Прежде всего, у меня есть форма частично внутри fancybox.Rails close fancybox on ajax request
это: * _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 %>
я отправляю данные внутри этой формы с функцией JQuery из моих application.js
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?
Возможно, я ошибся с dom_id fancybox. Выясните другой, если он не работает.) –
Спасибо! Это тоже работает btw: render: js => "$ .fancybox.close();" –