отправка данных json из django-view в ajax

Я пытаюсь передать данные json из представления django в шаблон с помощью ajax.
Вот мой ajax code:

$(document).ready(function(){
    console.log("this is getting executed")
    $.ajax({
           url: "/get_ecommdata/",
           type: "get",
           cache: "false",
           dataType : 'json',
           success: function(data) {
              console.log("This is working fine")
              alert(data)
           },
           error:function(xhr, ajaxOptions, thrownError) {
              console.log("this is error")
                alert(xhr.status)
           },
  })
});

Вид показан ниже:

def get_ecommdata(request):
    print "inside get_ecommdata"
    tempdata = ['{"square": 0, "key": 0}', '{"square": 1, "key": 1}', '{"square": 4, "key": 2}']
    return HttpResponse(tempdata)

код состояния 200, но все равно на консоли отображается «это ошибка», т. е. часть ошибки выполнения.

Вот что я понимаю:

код состояния 200, то есть сервер отправляет данные правильно, но есть проблема с определением типа данных. Этот код отлично работает для простого текста, но не для json.

Мой вопрос

Может ли кто-нибудь дать мне несколько указаний о передаче данных json из django-view в ajax. Думаю, я совершаю здесь какую-то глупую ошибку.

P.S. Я просмотрел другие похожие сообщения (json, ajax, view), но ни один из них не отвечает на этот конкретный вопрос.


person Conquistador    schedule 07.10.2015    source источник
comment
Используйте JsonResponse: docs.djangoproject.com/en/1.8/ ссылка/запрос-ответ/   -  person igor-chernikov    schedule 07.10.2015
comment
Мне кажется, это недопустимый json. Вы должны заключить его в [] и не заключать в одинарные кавычки. Посмотрите на мой ответ ниже, если он может вам помочь.   -  person cafebabe1991    schedule 07.10.2015


Ответы (1)


импортировать модуль json

import json

Затем попробуйте это в своем методе запроса

data = json.dumps([{"square": 0, "key": 0}, {"square": 1, "key": 1}, {"square": 4, "key": 2}])    

return HttpResponse(data, content_type="application/json")

ПРИМЕЧАНИЕ

Использование одинарных кавычек, как в вашем фрагменте, приведет к следующему выводу

'["{\\"square\\": 0, \\"key\\": 0}", "{\\"square\\": 1, \\"key\\": 1}", "{\\"square\\": 4, \\"key\\": 2}"]'

Это сбивает с толку ищущего, поэтому я использовал описанный выше метод. Но это зависит от выбора.

person cafebabe1991    schedule 07.10.2015
comment
Спасибо за ваше решение. Использование json.dumps решило мою проблему. Для записи. проблема была в django-view. Вот обновленный код, который работает нормально. def get_ecommdata(request): print "inside get_ecommdata" tempdata = ['{"square": 0, "key": 0}', '{"square": 1, "key": 1}', '{"square": 4, "key": 2}'] # tempdata = "hello" tempdata1 = json.dumps(tempdata) return HttpResponse(tempdata1,content_type="application/json") - person Conquistador; 07.10.2015
comment
Превосходно :-), но я бы все же посоветовал избегать использования кавычек, так как это приведет к ненужному \\ в вашем результате. Вы можете увидеть результат json.dumps, в вашем случае он будет содержать двойную косую черту, что сбивает с толку. Но если вы согласны с этим, то хорошо :-) но в качестве ответа, я думаю, мы должны сообщить им об этом. Что сказать ? - person cafebabe1991; 07.10.2015