【问题标题】:Form method="post" in vue cannot POSTvue中的form method="post"不能POST
【发布时间】:2022-01-07 14:40:54
【问题描述】:

我正在尝试创建一个网站,让用户可以使用给定的密码和时间段预订座位。我制作了一个表格,用户应该输入密码和他们的名字,然后提交表格进行预订。我遇到的问题是,如果我在表单中使用 get 方法,它会添加一个 ?到我不想要的 URL。单击按钮后,它应该只是在数据库中创建一个条目并将用户重定向到 HomeView。绕过?问题我想在表单中使用 post 方法,但如果我这样做,我会不断收到错误“Cannot POST /”。我搜索了很多地方,显然我必须在某个地方指定帖子,但是在哪里?

<form @submit="reserve" method="post" action="">
   <fieldset>
    <div class="mainmiddle">
      <a id="Header">Wählen Sie Ihre Einstellungen für die Reservierung:</a>
      <div id="settings" v-bind:key="this.$seat.seat.seatNumber">
        <a id="seatNumber">Sitz-Nummer: {{ this.seatNumber }}</a><br>
        <div id="time">
          <label for="daySuggestion">Tag:</label>&nbsp;
          <input v-on:click="setMinDateToday" v-model="dateOfReservation" type="date" id="daySuggestion">
          <label for="fromSuggestion">Von:</label>&nbsp;
          <input v-model="startTimeOfReservation" type="time" id="fromSuggestion">
          <label for="untilSuggestion">Bis:</label>&nbsp;
          <input v-model="endTimeOfReservation" type="time" id="untilSuggestion">
        </div>
        <input id="password" placeholder="Passwort" type="password" v-model="password" v-on:keyup="validatePassword" required/><br>
        <div id="passwordDiv">
          <input id="passwordAgain" placeholder="Passwort wiederholen" type="password" v-model="passwordAgain" v-on:keyup="validatePassword" required/>
          <span id='message'></span>
          <input id="showPassword" type="checkbox" v-on:click="showPassword"/>&nbsp; Passwort anzeigen
        </div>
        <label id="anonymLabel">Anonym reservieren:</label>
        <input id="anonym" type="checkbox" v-model="anonym"><br>
        <input id="nameReservingPerson" type="text" placeholder="Name..." v-model="nameReservingPerson" required/>

      </div>

      <div id="footer">
        <button type="submit" class="bottomButtons">Jetzt Reservieren</button>
        <button class="bottomButtons" v-on:click="goPrev">Abbrechen</button>
      </div>
    </div>
  </fieldset>
</form>

这是我在提交表单时调用的保留方法

reserve() {
      axios.post(`${config.apiBaseUrl}/seat/reserve/`,
          {
            seatNumber: this.seatNumber,
            password: this.password,
            anonym: this.anonym,
            nameReservingPerson: this.nameReservingPerson,
            reservedAt: {
              fromDate: Date.parse(this.dateOfReservation +" "+ this.startTimeOfReservation),
              untilDate: Date.parse(this.dateOfReservation +" "+ this.endTimeOfReservation),
            }
          },
          {
            headers: {
              'Content-Type': 'application/json',
              'Character-Encoding': 'utf-8',
            }
          }
      )
          .then(() => {
            alert("Der Platz wurde Erfolgreich Reserviert!")
            this.$router.push({path: '/'});
          })
          .catch(() => {
            alert("Der Platz wurde !NICHT! Erfolgreich Reserviert!")
          });
    },

一切都已经在表单中使用 get 方法了,但我无法绕过 ?问题。如何让 post 方法表单起作用?

【问题讨论】:

  • 这是标准浏览器
    提交。如果没有method="post",它默认为method="get",它将表单值附加到URL。不过,您正在使用 axios,所以您都不想要,这意味着您需要阻止标准表单提交。使用reserve(e) { 并立即致电e.preventDefault();。 (它与 get 一起工作,因为 get 方法与空白操作相结合会导致页面重新加载)
  • 天哪,你真是救命稻草,我尝试了好几个小时各种事情,就是这么简单哈哈。老实说,我无法感谢你
  • 不客气 :)

标签: javascript html vue.js


【解决方案1】:

您正在使用默认的 HTML 表单提交。 POST 方法用于将表单数据发送到服务器。
当您使用 JavaScript,尤其是 Axios 时,这些都不需要。

提交处理程序采用 event 参数,您应该使用它来阻止自动 HTML 提交:

event.preventDefault()

之后,您可以使用任何 HTTP 库来发挥自己的作用。

【讨论】:

  • 谢谢,preventDefault 解决了一切。我不敢相信这很容易
  • 请在发布答案之前检查重复项。这个问题绝对是骗人的。
猜你喜欢
  • 1970-01-01
  • 2012-01-13
  • 2020-07-18
  • 2015-03-24
  • 2021-10-02
  • 1970-01-01
  • 2022-09-27
  • 2017-05-28
  • 1970-01-01
相关资源
最近更新 更多