Отправить JSON на Django шаблон - PullRequest
0 голосов
/ 22 января 2020

У меня очень базовое c Django представление о том, что после получения запроса следует отправить ответ на страницу, которую посещает пользователь, чтобы я мог отобразить сообщение на этой странице без необходимости refre sh страницы.

Вот мое представление:

def Action(request):
    response = ''
    if request.method == 'POST':
        if request.POST.get('ajaxform', False) == 'submit':
            data = request.POST.get('formdata', False)
            mymodel = Userdata()
            mymodel.save()
            response = 'Submitted!'

    return HttpResponse(json.dumps(response), content_type='application/json')

Обычно, когда получен запрос POST, это представление должно отправить JSON ответ на шаблон с сообщение Submitted.

Это представление работает, когда я просматриваю свой шаблон, на моих инструментах разработки я вижу, что JSON ответ Submitted получен страницей, но я не понимаю, как я могу показать его используя Jquery.

Может ли кто-нибудь указать мне, как я могу создать функцию Jquery, которая запускается только при получении ответа Json представлением Django?

В основном, в этом случае, когда представление Django запускает ответ Submitted, моя функция Jquery должна получить это сообщение и сделать с ним что-то еще.

Я пробовал это:

$.ajax({
  url: "/mytemplate/Action",
  type: 'get',
  dataType: 'json',
  success: function (data) {
    console.log(data)
  }
});

Проблема с этой функцией заключается в том, что в моей консоли ничего не печатается, хотя я вижу ответ на вкладке Сеть.

1 Ответ

0 голосов
/ 22 января 2020

Полагаю, что поскольку вы вызываете json .dumps в строке, ваш jQuery также получает строку. Возможно, попробуйте позвонить json .dumps ({'response': 'Submitted!') На ваш взгляд.

Более простым решением может быть использование обратного вызова ".done", который запускается после запроса на публикацию. успешно Таким образом, вам не понадобится конкретный c ответ из python представления. При этом должен работать простой HttpResponse ('true').

Дополнительные сведения о обратном вызове .done здесь: https://api.jquery.com/jquery.get/

Редактировать после уточнения

Первая проблема на ваш взгляд. Там вы указали

if request.method == 'POST':

, но ваш запрос ajax использует метод GET

  type: 'get',

Кроме того, вы все еще отправляете строковый ответ, а не словарь 'stringfied' .

Я сделал рабочий пример, похожий на ваш пост. ИМО, ваше мнение должно быть:

def Action(request):
    response = ''
    if request.method == 'POST':
        if request.POST.get('ajaxform', False) == 'submit':
            data = request.POST.get('formdata', False)
            mymodel = Userdata()
            mymodel.save()
            response = 'Submitted!'

    return JsonResponse({'resp': response})

Для того, чтобы сделать запрос и разобраться с ответом, я сделал $ .post, что является более кратким

$.post("/mytemplate/Action", 
       params,
       function( data )
       {
           console.log(data )
       }
       )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...