在DJANGO中发布AJAX时出错
我有一个来自ajax的POST请求。在后端,django视图中的一些记录会被更新,这样做很好,但是出现了一个错误,页面不会被重新加载 这是错误:在DJANGO中发布AJAX时出错,django,ajax,post,Django,Ajax,Post,我有一个来自ajax的POST请求。在后端,django视图中的一些记录会被更新,这样做很好,但是出现了一个错误,页面不会被重新加载 这是错误: $.ajax({ headers: { "X-CSRFToken": token }, "url": '/articulos/massup/', "type": "POST", "dataType": "json", data: da
$.ajax({
headers: { "X-CSRFToken": token },
"url": '/articulos/massup/', "type": "POST",
"dataType": "json", data: data,
success: function(e){
if(e="OK"){
location.reload(true);
}
},
error: function(a,b,c){
alert(c);
}
});
});
@csrf_exempt
def massup(request):
template_name = "articulos/articulos_ok.html"
contexto={}
if request.method=="GET":
cat = Articulos.objects.all().order_by("codigo")
contexto={"obj":cat}
if request.method=="POST":
codigos=request.POST.getlist("codigos[]")
porcentaje = codigos[0]#el primer elemento de la lista es el porcentaje
porcentaje=Decimal(porcentaje)
codigos= [int(x) for x in codigos]#Convierte la lista en integer
art_change = Articulos.objects.filter(pk__in=codigos)
i=0
for item in art_change:
if i!=0: #Excluye el primer item ( el porcentaje)
precioant=item.precio
precionuevo=(precioant + (porcentaje * precioant/100))
item.precio=precionuevo
item.save()
i=i+1
return HttpResponse("OK")
return render(request,template_name,contexto)
SyntaxError:JSON中位于位置0的意外标记O
这是ajax:
$.ajax({
headers: { "X-CSRFToken": token },
"url": '/articulos/massup/', "type": "POST",
"dataType": "json", data: data,
success: function(e){
if(e="OK"){
location.reload(true);
}
},
error: function(a,b,c){
alert(c);
}
});
});
@csrf_exempt
def massup(request):
template_name = "articulos/articulos_ok.html"
contexto={}
if request.method=="GET":
cat = Articulos.objects.all().order_by("codigo")
contexto={"obj":cat}
if request.method=="POST":
codigos=request.POST.getlist("codigos[]")
porcentaje = codigos[0]#el primer elemento de la lista es el porcentaje
porcentaje=Decimal(porcentaje)
codigos= [int(x) for x in codigos]#Convierte la lista en integer
art_change = Articulos.objects.filter(pk__in=codigos)
i=0
for item in art_change:
if i!=0: #Excluye el primer item ( el porcentaje)
precioant=item.precio
precionuevo=(precioant + (porcentaje * precioant/100))
item.precio=precionuevo
item.save()
i=i+1
return HttpResponse("OK")
return render(request,template_name,contexto)
这是视图:
$.ajax({
headers: { "X-CSRFToken": token },
"url": '/articulos/massup/', "type": "POST",
"dataType": "json", data: data,
success: function(e){
if(e="OK"){
location.reload(true);
}
},
error: function(a,b,c){
alert(c);
}
});
});
@csrf_exempt
def massup(request):
template_name = "articulos/articulos_ok.html"
contexto={}
if request.method=="GET":
cat = Articulos.objects.all().order_by("codigo")
contexto={"obj":cat}
if request.method=="POST":
codigos=request.POST.getlist("codigos[]")
porcentaje = codigos[0]#el primer elemento de la lista es el porcentaje
porcentaje=Decimal(porcentaje)
codigos= [int(x) for x in codigos]#Convierte la lista en integer
art_change = Articulos.objects.filter(pk__in=codigos)
i=0
for item in art_change:
if i!=0: #Excluye el primer item ( el porcentaje)
precioant=item.precio
precionuevo=(precioant + (porcentaje * precioant/100))
item.precio=precionuevo
item.save()
i=i+1
return HttpResponse("OK")
return render(request,template_name,contexto)
Ajax调用的数据类型被定义为JSON,但您不会将JSON数据返回给Ajax函数。当调用返回的数据不是预期的JSON格式时,会发生特定错误。视图的POST部分返回HttpResponse,而不是JSON数据 所以只需导入JsonResponse并使用它而不是HttpResponse 在你看来:
from django.http import JsonResponse
"""
your view code here, then end your POST section with:
"""
data['success'] = True
return JsonResponse(data)
然后更新Ajax函数以正确读取响应。我将变量“e”改为带有“success”键的“data”,只是为了更清楚地了解正在发生的事情。记住,JSON非常类似于python字典:
success: function(data){
if(data['success'])...
它符合你的指示。问题在于如何按照你所说的设置响应。谢谢分享你的知识。@wwrandazoo很高兴听到这个消息。既然它回答了你的问题,请考虑将答案标记为工作解决方案(响应的左边的绿色复选标记),这样我就得到了信任。谢谢你。我做了好几次,但是一条消息弹出说“你没有足够的声誉去做那件事”。对不起,再次谢谢你!