Django Ajax «GET» возвращать только строки - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь получить некоторые данные из моей базы данных, используя ajax, и повторить их. по какой-то причине я получаю длинную строку, а не объект, который я могу перебрать.

views.py

def postHog(request):
if request.method == 'GET':
    pk = request.GET['megama']
    megama = Speciality.objects.get(id=pk)
    hog = Submain.objects.filter(speciality=megama)
    hogback = []
    for i in hog:
        if (i.image):
            hogback.append({"name": i.name, "desc": 
            i.desc, "image": i.image.url})
        else:
            hogback.append({"name": i.name, "desc": i.desc, "image": "None"})
response_data=json.dumps(hogback,ensure_ascii=False)
return JsonResponse({'hogback': response_data}, status=200,content_type="application/json")

urls.py

path(r'megamas/', views.postHog, name="post_hog"),

my js. js

 $(".btnsmain").click(function () {
    $.ajax({
        type: 'GET',
        url: "/megamas",
        data:{
            megama:$("#id_main").val()
        },
        success:function (data) {

            $.each(data.hogback, function (index,element) {
                alert(index,element.name);

            });

        },
        error: function (data) {
            alert("not good");

        }
    })
});

, если я использую alert (hogback [0]), я получаю "[" его как будто я получаю обратно строки, а не список и объекты dict.

спасибо!

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020

json.dumps() возвращает форматированную json строку.

JsonResponse принимает data в качестве python объекта, поэтому вам не нужно вручную преобразовывать данные в json , (см. документы )

Таким образом, должно работать следующее:

return JsonResponse({'hogback': hogback}, status=200, content_type="application/json")
0 голосов
/ 29 апреля 2020

Просто вам нужно разобрать метод javascript JSON .parse , который идентифицирует строку и затем конвертирует в JSON объект

Вам нужно отредактировать свой успех метод выключен ajax как это

        success:function (data) {
           const jsonData = JSON.parse(data)
           alert(jsonData)
           console.log(jsonData[0])
        },

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

Если решите вашу проблему, дайте мне знать

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