我使用ajax发布请求将一些变量从我的javascript前端发送到python后端。一旦后端接收到它,我想修改这些值并将它们发送回前端显示。我需要全部完成而无需刷新页面。
使用我现有的代码,将值返回到前端会给我一个“空”或“ [对象对象]”响应,而不是实际的字符串/ json。我认为我传递的变量格式不正确,但是对于我来说,理解我到底在做什么错或需要修复的问题太复杂了。
这是模板中的javascript ajax POST请求。我希望成功功能使用警报显示新数据。
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 URLs代码:
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)
答案 0 :(得分:1)
您需要将Object解析为实际的json字符串。 .toString()
将仅打印对象toString()
方法的实现,该方法是其字符串表示形式。默认情况下,对象仅通过调用toString()
不会打印出其json格式。您可能正在寻找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 );
}});
答案 1 :(得分:0)
我观察到,表单发送的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)