Выявление и отладка ошибки get JSON с Django - PullRequest
1 голос
/ 29 марта 2020

В моем приложении Django есть ошибка, которую я никак не могу понять из-за своей жизни

В основном проблема заключается в том, что мой вызов get JSON терпит неудачу в моем шаблон, и я не могу понять, почему, потому что я могу получить доступ к URL напрямую через браузер, и сервер разработки также показывает ответ 200.

Вот мой взгляд

def test(request):
    cases = ConfirmedCase.objects.all()
    cases = read_frame(cases, fieldnames=['provice_state', 'country_region', 'confirmedcases','date'])
    cases['date'] = pd.to_datetime(cases['date'])

    globaltrend = globaltrend.groupby('date')[['confirmedcases','1_day_growth']].sum().reset_index()
    globaltrend['date'] = globaltrend['date'].dt.date #convert back to date
    globaltrend= globaltrend.to_dict(orient='list')
    data = {}
    data['chart_data'] = globaltrend
    data = json.dumps(data,  default=str)

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

Вот URL

from tracker import views as tracker

urlpatterns = [
    path('test/', tracker.test, name="test"), 
]

Если я go до http://127.0.0.1: 8000 / test / в браузере, все отлично работает, и я вижу

{
  "chart_data": {
    "date": [
      "2020-03-26",
      "2020-03-27"
    ],
    "confirmedcases": [
      66885,
      69030,
    ],
    "1_day_growth": [
      3.21,
      3.18,
    ],
  }
}

Вот мой скрипт в моем шаблоне / html file

<script >
    $(document).ready(function(){
        var url = '{% url "test" %}'

            $.getJSON(url, function(d) {
                console.log("working");
                alert('yay')
            }).done(function(d) {
                console.log("done");
            }).fail(function(d) {
                console.log("error");
                console.log(url);
            }).always(function(d) {
                console.log("completed regardl");
            });

    });
</script>

Это продолжает выдавать ошибку (и я не вижу предупреждения), даже если это правильно консоль, в которой записывается URL-адрес. Кажется, я просто не могу успешно выполнить обратный вызов

Вот мой вывод сервера разработки по refre sh

[29/Mar/2020 00:53:59] "GET /test/ HTTP/1.1" 200 1498

Мне нужно это для диаграммы в моем шаблоне. Любая помощь будет очень признательна

ОБНОВЛЕНИЕ

Я думаю, что ошибка связана с представлением, потому что, когда я упрощаю представление к следующему:

def test(request):
    data = {"hello":[1,2,3]}
    return HttpResponse(json.dumps(data, default=str), content_type='application/json')

Мой вызов get JSON начинает работать в браузере (т.е. я вижу предупреждение и успех в журнале консоли)

Я не могу понять, почему исходное представление работает напрямую через URL, но не через get JSON call

1 Ответ

0 голосов
/ 31 марта 2020

Я разобрался в проблеме. Это было связано с отсутствующими значениями в дампе json. По сути, если в дампе json, созданном в представлении, есть значения NaN или inf, даже если URL правильно отобразит дамп, запрос данных через ajax приведет к ошибке

Добавление этих строк в представлении исправлена ​​ошибка globaltrend = globaltrend.replace (np.inf, 0) #replace inf значения со значением 0 globaltrend = globaltrend.replace (np.NaN, 0) # замените значения NaN значением 0

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