Django:传递AJAX的正确方法

时间:2019-01-08 18:17:02

标签: ajax django

我有一个视图,可以通过AJAX从前端获取参数。

我已经通过方式传递了AJAX参数,但是这次我的方法没有用。

我已经向朋友寻求帮助,他给我发送了另一种发送AJAX数据的方式。在我未经训练的眼睛中,它们两者都一样工作。所以我不知道为什么我的不起作用:

为什么?

我朋友的AJAX:

<script>
     $("#id_shipping_province").change(function () {
        var val_d = $("#id_shipping_department").val()
        var val_p = $("#id_shipping_province").val()
        $.ajax({
            url: "/district/?d_name=" + val_d + "&p_name=" + val_p
              }).done(function (result) {
             $("#id_shipping_district").html(result);
              });
         });
 </script>

我的AJAX

<script>
      $("#id_shipping_province").change(function () {
         var val_d = $("#id_shipping_department").val()
         var val_p = $("#id_shipping_province").val()
         $.ajax({
              url: "/district/",
              d_name: val_d,
              p_name: val_p
          }).done(function (result) {
              $("#id_shipping_district").html(result);
           });
         });
       });
</script>

查看

def get_district(request):
    d_name = request.GET.get("d_name")
    p_name = request.GET.get("p_name")
    data = Peru.objects.filter(departamento=d_name, provincia=p_name).values_list("distrito", flat=True)
    # data = Peru.objects.filter(provincia=p_name).values_list("provincia", flat=True)
    return render(request, "accounts/district_dropdown.html", {
        "districts": set(list(data))
})

1 个答案:

答案 0 :(得分:1)

您需要在d_name指定的单独对象中传递p_namedata属性。当前,您将它们作为ajax设置对象的顶级属性传递,不会起作用。

var val_d = $("#id_shipping_department").val()
var val_p = $("#id_shipping_province").val()
$.ajax({
    url: "/district/",
    data: {  // Pass parameters in separate object
        d_name: val_d,
        p_name: val_p
    },
}).done(function (result) {
    $("#id_shipping_district").html(result);
});

data对象将转换为查询字符串并附加到URL。

对于您朋友而言,他们在创建URL时会手动建立查询字符串-因此它们的版本有效。