Javascript 使用AJAX调用在Django模板和视图之间发送信息时出现问题

Javascript 使用AJAX调用在Django模板和视图之间发送信息时出现问题,javascript,python,django,ajax,Javascript,Python,Django,Ajax,我使用ajax post请求将一些变量从javascript前端发送到python后端。一旦后端收到,我想修改这些值并将它们发送回前端显示。我需要在不刷新页面的情况下完成这一切 在我现有的代码中,将值返回到前端会得到一个“null”或“[object]”响应,而不是实际的字符串/json。我相信我传递的变量的格式是不正确的,但它太复杂了,我无法理解我到底做错了什么或需要修复什么 这是我的模板中的javascript ajax POST请求。我希望success功能使用alert显示新数据 var

我使用ajax post请求将一些变量从javascript前端发送到python后端。一旦后端收到,我想修改这些值并将它们发送回前端显示。我需要在不刷新页面的情况下完成这一切

在我现有的代码中,将值返回到前端会得到一个“null”或“[object]”响应,而不是实际的字符串/json。我相信我传递的变量的格式是不正确的,但它太复杂了,我无法理解我到底做错了什么或需要修复什么

这是我的模板中的javascript ajax POST请求。我希望success功能使用alert显示新数据

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 );
        }
    });
这是接收请求的Django URL代码:

path('applications/1/normalize', views.normalize, name="normalize")
这是检索代码并将其发送回javascript文件的python视图:

from django.http import JsonResponse

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

您需要将对象解析为实际的json字符串。
.toString()
将只打印对象
toString()
方法的实现,这是它的字符串表示形式。默认情况下,对象不通过调用
toString()
打印json格式。您可能正在寻找
JSON.stringify(obj)


我注意到,表单发送的POST数据与此AJAX请求发送的POST数据之间存在差异。通过表单发送的数据将进行表单编码,而您发送的是原始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)

谢谢你的评论。但当我更改此选项时,仍然会得到“null”作为响应。您可能没有返回有效的json对象。查看您的后端代码,我可以看到您也没有正确地从请求中获取json。您返回的默认值也是“true”,不是有效的json方案
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)