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