Ajax для входа в систему пользователей ... функция обратного вызова не работает - PullRequest
0 голосов
/ 17 марта 2011

Это мой второй набег на Ajax, и я не совсем уверен, как это осуществить.

Итак, у меня есть модальное окно, которое открывается, когда анонимный пользователь пытается выполнить определенную задачу.Окно содержит форму регистрации пользователя, которую я затем $ .post для моего входа в систему Django.Если имя пользователя / пароль действительны, пользователь регистрируется в коде состояния 1 и возвращается в качестве ответа.Если нет, возвращается статус 0.

Когда я пытаюсь сделать это вне js, это работает.Однако в моем сценарии это не удается.Я думаю, что это связано с ответом content_type и тем, как я его интерпретирую.Я не уверен.

def login_async(request):       
if request.method=='POST' and len(request.POST['username'])<20 and len(request.POST['password'])<20:
    username=request.POST.get('username', '') #probably need to script tags here
    password=request.POST.get('password', '')
    user=auth.authenticate(username=username, password=password)
    if user is not None:
        auth.login(request,user)
        status=1
        response=HttpResponse()
        response['Content_Type']="text/html"
        response.write(status)
        return response
    else:
        status=0
        response=HttpResponse()
        response['Content_Type']="text/html"
        response.write(status)
        return response




$('input#login').click(function(event){
    $.post("/login_async/", {username:$('input[name=username]').val(), password:$('input[name=password]').val()}, //could also use $(this).serialize() here to capture all form inputs
        function(data){
            if(data==1){
                $('#login').dialog("close");
                }
    });
    });

В чем здесь проблема?Сначала я пытался вернуть ответ в виде JSON, но не мог понять, как заставить работать serialize.serializers ("json", status).Я продолжал получать ошибку.

Последний вопрос ...

Если я получу действительный статус (пользователь вошел в систему), это повлияет на поведение модальных окон на странице.Модальные окна открываются в зависимости от статуса входа в систему.Если пользователь вошел в систему, один набор окон открывается при событии щелчка, и наоборот.Этот переключатель зависит от контекста Django {% user.is_authenticated%}.

Этот контекст отображается правильно только один раз, при загрузке страницы?Могу ли я сделать что-нибудь, чтобы сообщить об изменении состояния модальным окнам, защищенным от легких взломов?

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Должно быть Content-Type.Если это не решит вашу проблему, попробуйте добавить параметр dataType в конце вызова $.post.

$.post("/login_async/", {}, function(data){
  // fancy stuff
}, "html");
0 голосов
/ 17 марта 2011

Да, я подумал об этом больше и понял, что мне нужно просто отсоединить существующие обработчики событий щелчка в модальных окнах, а затем связать новые обработчики событий в зависимости от ответа ajax.

Я люблю программировать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...