使用 ajax ( POST ) 发送字典到 python ( django 视图) 时出现问题 - >总是空的



所以我在html的头部调用它:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

然后用一个按钮调用一个函数:

<div>
<button class= "button" type="ajax-call" onclick="getValue();">Envoyer</button>
</div>

函数为:

<script type="text/javascript">
function getValue(){
....

$.ajax({
url: "{% url 'sondage' %}",
type : 'POST',
dataType: "json",
data: {heure_reponse: heure, jour_reponse: jour,habitude_reponse: habit, faim_reponse : faim, soif_reponse: soif, estomac_reponse:estomac, miam_reponse: miam, quantite_reponse: quantite, but_reponse: but, adresse_reponse: adresse, identifiant_reponse:identifiant
}
})
}
</script>

问题是:当我在django站点(python)的views.py中使用

from django.contrib.auth.decorators import login_required
from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import render
from csv import writer
from csv import QUOTE_MINIMAL
@csrf_exempt
@login_required
def sondage(request):
#Récupération des données par ajax
reponses = request.POST.items()
reponses = list(reponses)
if len(reponses) == 0:
print(" AJAX PROBLEME ")
reponses.append(request.user.get_filename().split('/')[1].split('.')[0])
name = request.user.get_filename().split('/')[1].split('.')[0]
#Ecriture dans le csv
write_csv(reponses,name)
#Appel de la page que l'on est en train de traiter
return render(request, 'sondage.html',{'data':reponses})

def write_csv(data,name):
#Ouverture en mode APPEND
with open('uploads/questionnaire/sondage.csv', 'a', newline='', encoding="utf-8") as csvfile:
csv_writer =  writer(csvfile, delimiter=',')
csv_writer.writerow(data)
csvfile.close()

我总是有"AJAX问题"! 为什么?我们如何解决这个问题?

你应该像这样转换你的数据字典

var dict_data = {heure_reponse: heure, jour_reponse: jour,habitude_reponse: habit, faim_reponse : faim, soif_reponse: soif, estomac_reponse:estomac, miam_reponse: miam, quantite_reponse: quantite, but_reponse: but, adresse_reponse: adresse, identifiant_reponse:identifiant}

const data= JSON.stringify(dict_data)

$.ajax({
url: "{% url 'sondage' %}",
type : 'POST',
dataType: "json",
data: data})

然后发送在Django视图中像这样读取

data = json.loads(request.POST['data'])

最新更新