在我的代码中,我有两个嵌套的 ajax 请求。这个想法是,当在带有 id 的输入上按 enter 时,输入placa
的值首先发送到视图ajax1
,执行一些操作,然后传递给视图ajax2
并返回一些结果。
假设当传递给另一个内部的第二个ajax请求时,它应该被打印{'ajax2': true}
但它不是,它正在被打印{'ajax1': true}
我究竟做错了什么?
视图.py
from django.http import JsonResponse
def ajax1(request):
if request.method == "POST":
if request.is_ajax():
return JsonResponse({"ajax1": True})
def ajax2(request):
if request.method == "POST":
if request.is_ajax():
return JsonResponse({"ajax2": True})
ajax 请求
// Función para obtener el token CSRF
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
$("#input").keypress(function(e) {
if(e.which == 13) {
e.preventDefault();
var csrftoken = getCookie('csrftoken');
var placa = $(this).val();
$.ajax({
url : window.location.href + "ajax1/",
type : "POST",
data : { csrfmiddlewaretoken : csrftoken,
placa : placa,
},
success : function(json) {
$.ajax({
url : window.location.href + "ajax2/",
type : "POST",
data : { csrfmiddlewaretoken : csrftoken,
placa : placa,
},
success: function(data2){
console.log(data2); // Debería imprimir {ajax2: true}
},
error : function(xhr,errmsg,err) {
console.log(xhr.status + ": " + xhr.responseText);
}
});
},
error : function(xhr,errmsg,err) {
console.log(xhr.status + ": " + xhr.responseText);
}
});
}
});
我推荐你使用 JavaScript Promises (JavaScript Promises),这里有详细的文档,因为它们确保完成一个请求可以跟随另一个请求,就像你正在寻找的一样。
我希望你觉得它有用,发展成功,祝福!
弗雷迪。