2015-11-06 3 views
1

Мне нелегко получить правильное поле из объекта из запроса ajax get. Запрос ajax находится в приложении Django и соответствует представлению. Линия:Невозможно получить данные из массива Json через запрос get ajax

console.log(data); 

отображает все данные в объекте. Я пытаюсь вывести имя пользователя в console.log(), но я не могу это сделать.

Я пробовал много вариантов, т. Е. Я использовал фильтр вместо того, чтобы попасть в раздел просмотра Django. Я попытался зациклиться на данных и использовать [i], но пока ничего не получилось.

Надеюсь, у кого-то есть идея, как решить эту проблему. Я прикрепил представление django, представление шаблона и выход консоли консоли Chrome.

Вид Джанго раздел:

def Data(request, user_id): 
    if request.is_ajax(): 
     sidebar_data = serializers.serialize("json",  
     [User.objects.get(id=user_id)]) 
     return HttpResponse(
      JsonResponse({'sidebar_data': sidebar_data}), 
      content_type="application/json" 
     ) 
    return HttpResponse("not a ajax request") 

Вид шаблона:

$(".test{{ user.user.id }}").click(function() { 
      $.ajax({ 
       url : ‘xxx/‘, 
       dataType : 'json', 
       method : 'GET', 
       success: function(data) 
       { 
        // this works - outputs all data 
        console.log(data); 
        // this does not work 
        console.log(data.sidebar_data.fields[1].username); 
       }, 
       failure: function(){ 
       } 
      }); 
     }); 

Выход для браузера в хромированной консоли:

Object { 
sidebar_data: "[{"fields": {"username": “xxx”, "first_name": “xxx”}, "model": "auth.user", "pk": 989}]”} 

Если я использую console.log (data.sidebar_data); Я получаю следующий результат, который является шагом ближе. Но как только я попробую любую комбинацию с полями или именем пользователя, я получу неопределенную ошибку.

[{"fields": {"username": “xx”, "first_name": “xxx”}, "model": "auth.user", "pk": 989}] 
+0

Здесь не проходит какой-либо информации $ .ajax ({url: 'xxx /', dataType: 'json', method: 'GET', ..., где ваши данные? s data: {} –

+0

try console.log (data.sidebar_data.fields ['username']) –

+0

Привет, Ajax-функция url - вызывает URL-адрес django и соответствующее представление, которое является ответ Json. Метод get упаковывает его в данные и выводит его в функцию успеха. Все это работает отлично, и console.log (data) также выводит все данные из таблицы базы данных. Я просто не могу понять, как получить доступ к имени пользователя. – provoke2015

ответ

0

изменения views.py как это:

from django.core import serializers 
def data(request): 
    if request.is_ajax(): 
     user = User.objects.filter(id=1) 
     data = serializers.serialize('json', user) 
     return HttpResponse(data, content_type ="application/json") 
    return HttpResponse("not a ajax request") 

и изменить шаблон, как это:

$(".test{{ user.user.id }}").click(function() { 
     $.ajax({ 
      url : ‘xxx/‘, 
      dataType : 'json', 
      method : 'GET', 
      success: function(data) 
      { 
       console.log(data[0].fields.username); 
      }, 
      failure: function(){ 
      } 
     }); 
    }); 
+0

Спасибо Хасан, я просто попробовал этот подход, но теперь у меня другая ошибка. ТипError at/profile/sidebar/57/ не JSON serializable – provoke2015

+0

@ provoke2015 проверить мои изменения и дать мне обратную связь –

+0

Я только что пробовал вашу последнюю идею и получил следующую ошибку. Uncaught SyntaxError: Неожиданный токен o. – provoke2015

0

Попробуйте data[1].fields[1] вместо data.sidebar_data.fields[1].username

+0

Спасибо за подход, но я получаю ту же ошибку. Uncaught TypeError: Невозможно прочитать поля свойств неопределенных. Я не уверен, чего здесь не хватает. – provoke2015

Смежные вопросы