【问题标题】:(Django) AJAX call doesn't hit view, form submit does. Why?(Django) AJAX 调用不会点击视图,表单提交会。为什么?
【发布时间】:2018-10-05 13:01:18
【问题描述】:

我有一个成功点击此网址的表单:

url(r'(?P<slug>[a-z0-9-_]+?)-(?P<product_id>[0-9]+)-(?P<hotel>[0-1]+)-(?P<shuttle>[0-1]+)/add/$',
        views.product_add_to_cart, name="add-to-cart"),

这是表格:

 <form id="product-form" role="form" class="product-form clearfix" method="post"
                  action="{% url 'product:add-to-cart' product_id=product.pk slug=product.get_slug hotel=1 shuttle=1 %}" novalidate>

</form>

但是,当我尝试通过像这样的 AJAX 调用点击按钮点击相同的网址时:

$(".book-event-variants .book-main").click(() => {
    const id = $(".book-main").attr("event-id");
    const slug = $(".book-main").attr("event-slug");
    $.ajax({
        url: "/products/" + slug + "-" + id + "-0-0/add",
        type: 'POST',
        success: () => {
            onAddToCartSuccess();
        },
        error: (response) => {
            onAddToCartError(response);
        }
    });
});

我收到一个错误:

jquery.js?eedf:9566 POST http://127.0.0.1:8000/products/sofia-fall-2018-1-0-0/add 404(未找到)

为什么两者有区别?

为什么我不能拨打电话?

第一个问题:不同的命名空间是否会成为问题。例如我正在从不同的应用程序模板执行 AJAX 请求。

【问题讨论】:

标签: jquery ajax django forms


【解决方案1】:

在您的 ajax 发布方法 url 中缺少结尾斜杠。在网址末尾添加'/' 即可解决问题。

$.ajax({
    url: "/products/" + slug + "-" + id + "-0-0/add/",
    type: 'POST',
    success: () => {
        onAddToCartSuccess();
    },
    error: (response) => {
        onAddToCartError(response);
    }
});

【讨论】:

  • 您可以使用@csrf_exempt 来消除该错误。但是以后你可以对 csrf 使用 ajax csrf 方法。参考here
猜你喜欢
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 2020-10-16
相关资源
最近更新 更多