【发布时间】:2021-04-22 00:58:17
【问题描述】:
我已经构建了一个 Django 应用程序,该应用程序将 AJAX 发布请求提交到我的数据库。最初的 post 请求工作正常,但之前的每个请求也会在第一次响应后返回。
底线:有什么方法可以清除之前的 AJAX 请求/响应?
这是我启动服务器并提交第一个请求时的第一个响应(请求是针对 pk:1):
MedInput page loaded (index):46
Med Input Form Submitted (index):49
csrfmiddlewaretoken=i889gLsqdY9glqI59wRXLTOVehz9Lmp1i5IRikOsgvrGdBD9OpISolDrJ8pqJDmV&input_meds=lisinopril (index):53
(index):60
[{…}] (index):61
0: {model: "medrec_app.medication", pk: 1, fields: {…}}
length: 1
__proto__: Array(0)
这是我提交另一个请求时发生的情况(此请求是针对 pk:3):
Med Input Form Submitted (index):49
csrfmiddlewaretoken=i889gLsqdY9glqI59wRXLTOVehz9Lmp1i5IRikOsgvrGdBD9OpISolDrJ8pqJDmV&input_meds=lisinopril (index):53
(index):60
(2) [{…}, {…}] (index):61
0: {model: "medrec_app.medication", pk: 1, fields: {…}}
1: {model: "medrec_app.medication", pk: 3, fields: {…}}
length: 2
__proto__: Array(0)
当我同时请求 pk:1 和 pk:3 时会发生以下情况:
Med Input Form Submitted (index):49
csrfmiddlewaretoken=i889gLsqdY9glqI59wRXLTOVehz9Lmp1i5IRikOsgvrGdBD9OpISolDrJ8pqJDmV&input_meds=lisinopril (index):53
(index):60
(4) [{…}, {…}, {…}, {…}] (index):61
0: {model: "medrec_app.medication", pk: 1, fields: {…}}
1: {model: "medrec_app.medication", pk: 3, fields: {…}}
2: {model: "medrec_app.medication", pk: 3, fields: {…}}
3: {model: "medrec_app.medication", pk: 1, fields: {…}}
length: 4
__proto__: Array(0)
我只想要来自最近 AJAX 请求/响应的响应(如最后一个示例所示,它包含可变数量的模型,而不仅仅是最后一个)。
我尝试设置 $.ajax(..., cache: false, ...),但没有做任何事情,我尝试清空尽可能多的字典/列表。
有什么方法可以清除之前的请求/响应?我错过了什么?
这是我的代码:
views.py
class postMedRec(View):
form_class = MedInputForm
template_name = 'medrec_app/med_input.html'
med_match = []
med_set = Medication.objects.all()
def post(self, request):
if self.request.is_ajax and self.request.method == "POST":
form = self.form_class(self.request.POST)
if form.is_valid():
input_meds = form.cleaned_data['input_meds']
for med in self.med_set:
if re.search(med.generic_name,input_meds, re.IGNORECASE):
self.med_match.append(med)
ser_meds={}
ser_meds = serializers.serialize('json',self.med_match)
return JsonResponse({'med_output':ser_meds}, status = 200)
else:
return JsonResponse({"error", form.errors}, status= 200)
return JsonResponse({"error":""}, status=400)
urls.py
app_name="medrec_app"
urlpatterns = [
path('', MedInputView.as_view(), name="med_input"),
path('post/ajax/med_rec/', postMedRec.as_view(), name="post_medrec"),
path('meds/', MedicationList.as_view(), name="med_list"),
path('meds/<int:pk>/', MedicationDetail.as_view(), name="med_detail"),
path('meds/add/', AddMedView.as_view(), name="add_med"),
]
med_input.html(我的模板):
{% extends 'base.html' %}
{% block header %}
<div class="container-fluid">
<h1 class="display-2">Medication Reconciliation</h1>
</div>
{% endblock header %}
{% block content %}
<div class="container-fluid">
<form id="med_input_form">
<div class="form-group" >
{% csrf_token %}
<label for="{{form.input_meds.id_for_label}}">{{form.input_meds.label}}</label>
{{form.input_meds}}
</div>
<button type="submit" class="btn btn-primary">Reconcile Meds</button>
</form>
</div>
<div class="container-fluid">
<ul id="med_output">
</ul>
</div>
<script>
console.log('MedInput page loaded');
$("#med_input_form").submit(function(event){
console.log('Med Input Form Submitted');
event.preventDefault();
var serializedData = $(this).serialize();
console.log(serializedData);
$.ajax({
type: "POST",
url: '{% url "medrec_app:post_medrec" %}',
data: serializedData,
success: function(response) {
$('#med_output').html("");
console.log($('#med_output').html());
console.log(JSON.parse(response["med_output"]));
var med_ajax = JSON.parse(response["med_output"]);
$('#med_output').html('<li>'+med.fields.generic_name+'</li>');
}
})
});
</script>
{% endblock content %}
{% block javascript %}
{% endblock javascript %}
【问题讨论】: