Ajax. При вызове данных по ключу из словаря получаю undefined

239
07 мая 2018, 23:38

Имеется функция ajax, принимающая данные с формы и отправляющая их на сервер django в представление. В представлении производится проверка логина и пароля, если пользователь успешно залогинен, то возвращается словарь с ключами signupstatus (численное значение 1) и trash (со строковым значением trash). Ajax ф-ция получает данные в виде словаря. Так при вызове console.log(data) я получаю {"signupstatus":1, "trash":"trash"}. Плавно переходя к основной проблеме: при вызове console.log(data.signupstatus) я получаю данные типа unidentified. В чём же кроется проблема? (на мой взгляд что-то с названиями ключей)

Код ajax-функции:

$(document).ready(function(){
    var form = $('#signin_form');
    form.on('submit', function(e){
        e.preventDefault();
        var url = form.attr("action");
        var username = $('#username').val();
        var password = $('#password').val();
        var csrf_token = $('#signin_form [name="csrfmiddlewaretoken"]').val();
        console.log(username);
        console.log(password);
        $.ajax({
            type: "POST",
            url: url,
            data: {
                'username': username,
                'password': password,
                'csrfmiddlewaretoken': csrf_token,
            },
            dataType: "text",
            cache: false,
            success: function(data){
                console.log(data);
                console.log(data.signupstatus);
                console.log(data.trash);
                if(data.signup){
                    console.log('lol')
                }
            }
        })
    })  
})

Представление на Django:

def sigin(request):
return_dict = dict()
if request.method == "POST":
    username = request.POST["username"]
    password = request.POST["password"]
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        return_dict["signupstatus"] = 1
        return_dict["trash"] = 'trash'
    else:
        return_dict["signupstatus"] = 0
return JsonResponse(return_dict)

Заранее прошу не предлагать использовать предустановленные формы для логина и прочих фич от django (хочется самому разобраться с аутентификацией, чтобы лучше проникнуться фреймворком). Заранее благодарю за ваши ответы.

Answer 1
console.log(typeof data); // string? 

Измените:

dataType: "text",

нa

dataType: "json",

data станет не строкой, а объектом со всеми свойствами из словаря.

READ ALSO
Получение MCC, MNC, LAC, CID из js

Получение MCC, MNC, LAC, CID из js

Доброго времени суток

242
Как вывести на страницу только одно значение из результата post запроса

Как вывести на страницу только одно значение из результата post запроса

В ответе из ajax запроса получаю такой резултат [{"msisdn":"999999999","debug_opt":false,"service":"prepaid"}] Как вывести только одно значение например "service": "prepaid" в читабельном...

216
Синхронизация MongoDB и Firebase

Синхронизация MongoDB и Firebase

Есть два приложенияУ обоих сервер на Node

157
Caesars Cipher не работает

Caesars Cipher не работает

Не могу найти ошибкуСо знаками, не являющимися буквами, еще не разбирался

207