You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中用JavaScript通过锚点提交表单无法发送POST请求

问题:表单提交时期望POST请求却发送了GET请求

我尝试用JavaScript提交表单,但后端接收到的是GET请求,而我期望的是POST请求。相关代码及日志如下:

HTML代码

<form id="my_form" method="post">
    {% csrf_token %}
    {{form.as_p}}
    <input type="number" name="conf" >
    <a onclick="document.getElementById('my_form').submit();" href="{% url 'signup' 0 %}">ارسال کد</a>
    <br><br>
    <button type="submit">ثبت نام</button>
</form>

控制台日志

"GET /signup/0 HTTP/1.1" 200 1531

期望输出

"POST /signup/0 HTTP/1.1" 200 

解决方案

问题出在<a>标签的默认行为上。点击该链接时,虽然触发了form.submit()发起POST请求,但<a>标签自带的跳转(向href指定URL发送GET请求)没有被阻止,最终浏览器执行了GET跳转,导致你看到的是GET请求日志。

有两种解决方式:

  • 方式一:阻止<a>标签的默认跳转行为
    修改onclick事件,添加阻止默认行为的逻辑:

    <a onclick="document.getElementById('my_form').submit(); return false;" href="{% url 'signup' 0 %}">ارسال کد</a>
    

    或者更标准的写法:

    <a onclick="event.preventDefault(); document.getElementById('my_form').submit();" href="{% url 'signup' 0 %}">ارسال کد</a>
    
  • 方式二:用按钮替代<a>标签
    触发表单提交用按钮更符合语义,也不会有默认GET跳转问题:

    <button type="button" onclick="document.getElementById('my_form').submit();">ارسال کد</button>
    

修改后,点击"ارسال کد"就只会触发表单的POST提交,后端就能收到预期的POST请求了。

内容的提问来源于stack exchange,提问作者mehdi_ahmadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:39:28