html按钮可以执行POST请求吗?


76

我想要一个提交类型按钮来发送POST请求。

我在想这样的事情:

<form action = "" method = "post">
    <button>Upvote</button>
<form>

字符串“ Upvote”将在POST请求中作为名称发送。

我知道这是行不通的,并且我知道有使用AJAX(javascript)的方法,但是我对这个领域还很陌生。我只是想知道这是否可能。

更新资料

有人建议<input>我使用标签。问题在于它生成的是GET而不是POST。


我不会将upvote字符串发布到服务器。我现在将尝试
dorafmon

您需要js支持,例如jquery $ .post
farmer1992

3
您需要使用Submit按钮:<button type="submit">Send it</button>代码的其余部分看起来不错(空格除外),action字段保存指向所需服务器资源的url,该URL将数据用于进一步处理。
势在必行的2013年

3
您确实需要花一些时间来熟悉HTML表单
Oded

3
当然。我为您提供了很好的学习资源。
Oded

Answers:


48

这可以通过类型为“ submit”的输入元素来完成。这将作为按钮显示给用户,单击该按钮将发送表单。

<form action="" method="post">
    <input type="submit" name="upvote" value="Upvote" />
</form>

65

您需要给按钮一个名称和一个值。

没有名称就不能提交控件,并且按钮元素的内容是标签,而不是值。

<form action="" method="post">
    <button name="foo" value="upvote">Upvote</button>
</form>

2
不使用此按钮可以(跨浏览器安全)type="submit"吗?
Mohammed Noureldin

5
@MohammedNoureldin-是的。submit对于默认值type在属性<button>
昆汀

10

您可以在JS的帮助下完成此操作。在以下示例中,使用fetch方法在单击按钮时提交了POST请求:

const button = document.getElementById('post-btn');

button.addEventListener('click', async _ => {
  try {     
    const response = await fetch('yourUrl', {
      method: 'post',
      body: {
        // Your body
      }
    });
    console.log('Completed!', response);
  } catch(err) {
    console.error(`Error: ${err}`);
  }
});
<button id="post-btn">I'm a button</button>


3

您可以:

  • 请使用<input type="submit" ..>,而不是该按钮。
  • 或者,使用一些JavaScript来获取表单对象(使用名称或ID),然后对其进行调用submit(..)。例如:form.submit()。将此代码附加到按钮单击事件。这将序列化表单参数并执行表单的method属性中指定的GET或POST请求。

使用<input> ...将生成GET请求而不是POST ...我已经对其进行了测试
dorafmon

<form action = "" method "post"> <input type="Submit" name="upvote" value="Upvote"/> </form>我拥有的代码
dorafmon

@dorafmon —除非http://127.0.0.1:8000/debate/00000001?upvote=Upvote首先在URL上呈现表单,否则您不应获得该结果。
Quentin

我先开始debate/00000001,然后单击upvote按钮,然后得到结果URL ...
dorafmon 2013年

我真的怀疑页面的其他部分正在修改method属性。
UltraInstinct
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.