Проблема отправки информации между шаблоном Django и представлениями с использованием вызова AJAX - PullRequest
0 голосов
/ 21 июня 2019

Я использовал почтовый запрос ajax, чтобы отправить некоторую переменную из моего интерфейса javascript на сервер Python.Как только он будет получен серверной частью, я хочу изменить эти значения и отправить их обратно для отображения на серверной части.Мне нужно сделать все это без обновления страницы.

В моем существующем коде возврат значений во внешний интерфейс дает мне ответ 'null' или '[object object]' вместо действительной строки / json.Я считаю, что форматирование переменных, которые я передаю, является неправильным, но для меня слишком сложно понять, что именно я делаю неправильно или нужно исправить.

Это POST-запрос jjascript ajax в моем шаблоне,Я хотел бы, чтобы функция успеха отображала новые данные с помощью оповещения.

var arr = { City: 'Moscow', Age: 25 };

    $.post({
        headers: { "X-CSRFToken": '{{csrf_token}}' },
        url: `http://www.joedelistraty.com/user/applications/1/normalize`,
        data: {arr},
        dataType: "json",
        contentType : "application/json",
        success: function(norm_data) {
            var norm_data = norm_data.toString();
            alert( norm_data );
        }
    });

Это мой код URL Django для получения запроса:

path('applications/1/normalize', views.normalize, name="normalize")

Это представление Python для извлечениякод и отправить его обратно в файл JavaScript:

from django.http import JsonResponse

def normalize(request,*argv,**kwargs):
    norm_data = request.POST.get(*argv, 'true')
    return JsonResponse(norm_data, safe = False)

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Вам нужно проанализировать ваш объект по фактической строке json..toString() будет распечатывать только реализацию объекта toString(), который является его строковым представлением.По умолчанию объект не распечатывает свой формат json, просто вызывая toString().Возможно, вы ищете JSON.stringify(obj)

$.post({
headers: { "X-CSRFToken": '{{csrf_token}}' },
url: `http://www.joedelistraty.com/user/applications/1/normalize`,
data: {arr},
dataType: "json",
contentType : "application/json",
success: function(norm_data) {
    var norm_data = JSON.stringify(norm_data);
    alert( norm_data );
}});
0 голосов
/ 24 июня 2019

Я заметил, что есть разница между данными POST, отправляемыми формой, и данными POST, отправляемыми этим AJAX-запросом.Данные, отправляемые через форму, будут закодированы в форме, тогда как вы отправляете необработанные данные JSON.Использование request.body решит проблему

from django.http import JsonResponse

def normalize(request):
    data = request.body.decode('utf-8')
    #data now is a string with all the the JSON data.
    #data is like this now "arr%5BCity%5D=Moscow&arr%5BAge%5D=25"
    data = data.split("&")
    data = {item.split("%5D")[0].split("%5B")[1] : item.split("=")[1] for item in data}
    #data is like this now "{'City': 'Moscow', 'Age': '25'}"

    return JsonResponse(data, safe= False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...