#jquery
#jquery
Вопрос:
У меня есть ссылка с двумя классами:
<a href="#" class="loginable postStory">Share Your Quirks</a>
loginable проверяет, вошел ли пользователь в систему, и, если нет, отображает всплывающее окно «модального» входа:
$(".loginable").live("click",function(e) {
$.getJSON("/cfcs/global.cfc?method=userAuthenticatedamp;returnformat=json", {}, function(res,code) {
if(res == 0){
doSiteLogin();
}
});
})
postStory загружает форму для добавления истории:
$(".postStory").live("click", function(e) {
$(function() {
$("#divCentre").load(siteRoot "add_story.cfm?mode=create");
})
});
Идея заключается в том, что после нажатия на ссылку мы не хотим показывать страницу add_story, если пользователь не вошел в систему, т. Е. Нам нужно, чтобы пользователь оставался на текущей странице ДО тех пор, пока он успешно не войдет в систему. Но в настоящее время он отображает страницу add_story И всплывающее окно входа в систему.
Чтобы понять, что я имею в виду, перейдите к www.quirkup.com и нажмите на ссылку «Поделиться своими причудами» в верхней части раздела «Истинные признания».
Проблема в том, что пользователь может закрыть модальное окно без входа в систему и может начать заполнять форму. Я понимаю, что, вероятно, смогу скрыть форму до завершения входа в систему, но мне интересно, есть ли лучший способ.
Редактировать
Функция doSiteLogin() выглядит следующим образом
function doSiteLogin() {
ColdFusion.Window.create('loginwindow','Login','/inc_site_login_form.cfm',{x:400,y:300,height:200,width:300,center:true,modal:true});
}
function handleSiteLogin() {
ColdFusion.Ajax.submitForm('siteloginform','/processLogin.cfm',handleSiteLoginResponse);
}
function handleSiteLoginResponse(s) {
var userid = s.split("^")[0] || 0;
var firstname = s.split("^")[1] || 0;
var lastname = s.split("^")[2] || 0;
var usertype = s.split("^")[3] || 0;
var confirmed = s.split("^")[4] || 0;
var enabled = s.split("^")[5] || 0;
var authenticated = s.split("^")[6] || 0;
if(authenticated == 1){
ColdFusion.Window.hide('loginwindow');
alert('Successfully logged in.nRefreshing page...');
window.location.reload();
}else{
if(confirmed != 1){
alert('Your account has not been activated. Please ensure you have clicked the confirmation link in your email.');
return false;
}else if(!enabled || enabled.toLowerCase() == 'no'){
alert('Your account is not activated. Please contact Quirkup.');
return false;
}else{
alert('Your login failed. Please try again.nIf the problem persists, or you have forgotten your login details, please email info@asia-buy.com.');
return false;
}
}
}
Ответ №1:
Я не понимаю, почему у вас есть 2 класса и 2 события для этого… это должно быть:
$(".loginable").live("click",function(e) {
$.getJSON("/cfcs/global.cfc?method=userAuthenticatedamp;returnformat=json", {}, function(res,code) {
if(res == 0){
doSiteLogin();
} else {
$("#divCentre").load(siteRoot "add_story.cfm?mode=create");
}
});
})
Простая инструкция else должна исправить эту часть. Теперь, когда пользователь не зарегистрирован и входит в систему, вы можете это сделать…
function handleSiteLoginResponse(s) {
var userid = s.split("^")[0] || 0;
var firstname = s.split("^")[1] || 0;
var lastname = s.split("^")[2] || 0;
var usertype = s.split("^")[3] || 0;
var confirmed = s.split("^")[4] || 0;
var enabled = s.split("^")[5] || 0;
var authenticated = s.split("^")[6] || 0;
if(authenticated == 1){
ColdFusion.Window.hide('loginwindow');
$("#divCentre").load(siteRoot "add_story.cfm?mode=create");
}else{
if(confirmed != 1){
alert('Your account has not been activated. Please ensure you have clicked the confirmation link in your email.');
return false;
}else if(!enabled || enabled.toLowerCase() == 'NO'){
alert('Your account is not activated. Please contact Quirkup.');
return false;
}else{
alert('Your login failed. Please try again.nIf the problem persists, or you have forgotten your login details, please email info@asia-buy.com.');
return false;
}
}
}
Нет причин перезагружать страницу. Кроме того, никогда не используйте метод «Alert ()», чтобы сообщить что-то пользователю. Это останавливает всю страницу от каких-либо действий. Это буквально замораживает javascript.
Комментарии:
1. Потому что loginable — это универсальная функция для ЛЮБОЙ ссылки, для которой сначала требуется войти в систему.
2. Затем просто покажите им форму входа пользователя через перенаправление. Странно (и сложно с точки зрения программирования) обрабатывать аутентификацию пользователя с помощью javascript.
3. Страница перезагружается, чтобы выполнить повторную проверку в переменной сеанса пользователя, чтобы отобразить функции и ссылки для тех, кто вошел в систему. Я ХОЧУ, чтобы обработка останавливалась после предупреждений. Я даже добавил ошибки возврата, чтобы убедиться, что это произойдет. Забудьте о том, как я это запрограммировал. Мне просто нужно решение, чтобы не отображать форму до завершения входа в систему, и я буду счастлив.