javascript - Django - 使用 Ajax 时 POST 方法错误 "POST/......./HTTP/1.1"405 0

标签 javascript jquery ajax django

我使用POST 方法,因为我需要更改数据库。但每次我使用POST方法时,都会出现这个错误。每次我单击该按钮时,页面都不会加载并显示 "POST/book/go-action/HTTP/1.1"405 0。当我使用 q = request.POST["quantity"]q = request.POST.get('quantity', '') 时没有区别。如果我使用GET方法,则不会出现该问题,但GET方法无法满足需求。另外,我不需要表单中的 action ,因为我不需要页面重定向到某个地方,并且我使用 ajax 来调用函数 View 。我该如何解决这个问题?

更新:

该问题是由于缺少 action="{% url 'cart:add_to_cart' %}" 引起的。但我不希望它重定向到另一个页面,这就是我使用 Ajax 而不是使用 action 的原因。如果使用 action 那么我猜 Ajax 将变得毫无意义。

book/detail.html:

<script>
    $(document).ready(function () {
        $("#add").click(function () {
            alert('clicked');
            $.ajax({
                url: '{% url "cart:add_to_cart" %}',
                type: "POST",
                dataType: 'json',
                success: function (response) {
                    $("#cartButton").text("Cart" + "(" + response.quantity + ")");
                },
                error: function (response) {
                    alert('Got an error');
                }
            });
        });
    });
</script>

<form method="post"> {% csrf_token %}
    <select name="quantity">
        <option>1</option>
        <option>2</option>
        <option>3</option>
    </select>
    <input name="bookID" value=" {{ book.id }} " hidden>
    <button id="add" type="submit"> Add to Cart</button>
</form>

购物车/views.py:

def add_books(request):

    c = Cart.objects.get(user=request.user)

    if request.method == 'POST':
        # q = request.POST["quantity"]
        # book_id = request.POST["bookID"]

        q = request.POST.get('quantity', '')
        book_id = request.POST.get('bookID', '')

       # the rest of the code here         

        return JsonResponse(response)

cart/urls.py:

app_name = 'cart'
urlpatterns = [
    path('add_books/', views.add_books, name='add_to_cart')
]

book/urls.py:

app_name = 'book'
urlpatterns = [
    path('<slug:slug>/', views.BookDetailView.as_view(), name='detail'),
 name='category_search'),
]

最佳答案

问题是您的表单提交并将请求发送到 /book/go-action/ ,我假设这是表单所在 View 的路由,但 POST 应该转到的路由是 /add_booksurls.py 中所定义.

要解决此问题,您需要添加 action归因于您的<form> 。这是一个例子:

<form method="post" action="/add_books"> {% csrf_token %}
    <select name="quantity">
        <option>1</option>
        <option>2</option>
        <option>3</option>
    </select>
    <input name="bookID" value=" {{ book.id }} " hidden>
    <button id="add" type="submit"> Add to Cart</button>
</form>

编辑:Ajax代码(独立于我上面的代码)

我认为这里的主要问题是 click事件函数将正常工作(据我所知),执行后,仍然会触发提交事件并发生默认操作。要修复您需要添加 event作为函数的参数并调用 preventDefault在那event这样就不会发生默认提交。

看起来是这样的:

<script>
    $(document).ready(function () {
        $("#add").click(function (event) {
            event.preventDefault();
            alert('clicked');
            $.ajax({
                url: '{% url "cart:add_to_cart" %}',
                type: "POST",
                dataType: 'json',
                success: function (response) {
                    $("#cartButton").text("Cart" + "(" + response.quantity + ")");
                },
                error: function (response) {
                    alert('Got an error');
                }
            });
        });
    });
</script>

关于javascript - Django - 使用 Ajax 时 POST 方法错误 "POST/......./HTTP/1.1"405 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52451590/

相关文章:

asp.net - JSON.NET 读取 JObject 时出错

ajax - JQuery Ajax 调用通常无法在 Safari 6 上运行

Javascript变量似乎没有进入DOM

javascript - 尝试作为 Prop 传递时, react 状态变量意外未定义

jquery - Django LoginRequired mixin 总是拒绝访问

Jquery:$ajax - 即使请求成功也会调用错误函数

javascript - 将 JSON 转换为 Javascript 数组

javascript - Jquery — 设置子项以填充父项的剩余宽度

javascript - 在 pug 文件上的 p.lead 的同一行中添加 jQuery id

php - 将计算的 PHP 变量传递给 jQuery/Ajax 表单