gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:10:39 24 4
gpt4 key购买 nike

我使用 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>

cart/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_books如您的 urls.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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com