从api设置值后如何自动提交表单

Posted

技术标签:

【中文标题】从api设置值后如何自动提交表单【英文标题】:How to auto submit form after values are set from api 【发布时间】:2021-12-31 07:40:37 【问题描述】:

调用api后设置from值后如何自动提交表单

我希望表单在从 api 成功获取值后自动提交,

我使用了 $refs.form.submit(),但是,它没有按预期工作,

一个请求被发送到:http://localhost:3200/login-saml (FE)

虽然预期的 url 是:localhost:8080/login (BE)

这是我所有的代码:

<template>
  <!-- Sing in  Form -->
  <section class="sign-in" style="padding-top: 65px">
    <div class="container">
      <form v-bind:action="urlLogin" method="post" ref="form">
        <input type="text" id="SAMLRequest" name="SAMLRequest" v-model="SAMLRequest">
        <input type="submit" value="Submit">
      </form>
    </div>
  </section>
</template>

<script>
import axios from 'axios';

export default 
  name: 'LoginPage',
  data() 
    return 
      urlLogin: '',
      SAMLRequest: ''
    
  ,
  mounted() 
    axios.get(`http://localhost:8080/rest/v2/sso/loginInfo`)
        .then(response => 
          this.urlLogin = response.data.urlLogin;
          this.SAMLRequest = response.data.samlrequest;
          this.$refs.form.submit();
        )
        .catch(e => 
          console.log(e)
        )
  

</script>

【问题讨论】:

有什么问题?你有错误吗?还是别的什么? @MahEs 我已经用错误详情更新了问题,希望你能帮我检查一下 您的 axios 调用是否返回 200 ?你能提供你的回应日志吗?我不是usre,但我认为问题可能是您的axios url是本地url。 @MahEs axios 返回 200,如果我删除它,一切正常。$refs.form.submit();并手动点击 【参考方案1】:

我认为您遇到问题的原因是您在表单中设置的action 属性。我不知道您网站的后端结构(它是node-jsphp 或...),但是当您在项目中使用axios 时,实际上您不需要使用正常表单提交方式(使用:action 和提交按钮提交表单)。您可以借助 axios 方法来处理它。这是我使用 vue 组件提交表单(例如注册表单)的一种方式:

<template>
  <!-- Sing in  Form -->
  <section>
    <div>
        <form method="post">
            <label for="usernameId">username:</label>  
            <input type="text" id="usernameId" name="username" v-model="username">

            <label for="emailId">email:</label>  
            <input type="email" id="emailId" name="email" v-model="email">

            <label for="passwordId">password:</label>  
            <input type="password" id="passwordId" name="password" v-model="password">

            <button type="button" @click="postData">Submit</button>
        </form>
    </div>
  </section>
</template>

<script>
import axios from 'axios';

export default 
  name: 'formCompo',
  data() 
    return 
      username: '',
      email: '',
      password: ''
    
  ,

  methods: 
      postData: function() 
        let postVar = 
            username: this.username,
            email: this.email,
            password: this.password
        ;
        /* put your back-end url in axios.post() for example http://localhost:3200/saml-... */
        axios.post(`http://localhost:8080/stack-overflow/axios-test/datafind.php`, postVar).then((result) => 
            console.log(result);
        ).catch(err => 
            console.error(err);
        );
      
  ,

  mounted() 
    /* put the url that you want to get data from back-end in post.get() */
    axios.get(`http://localhost:8080/stack-overflow/axios-test/dataGet.php`)
        .then(response => 
          console.log(response.data);
          this.username = response.data.username;
          this.email = response.data.email;
          this.password = response.data.password;
          this.postData();
        )
        .catch(e => 
          console.log(e)
        )
        
  

</script>

您可以在上面的代码中只注释&lt;form&gt; 标记,以查看它是否可以再次正常工作而没有任何问题。在上面的代码中,我使用 postData 方法通过 axios 将数据发布到后端。当按钮被点击或在mounted() 钩子中时,可以调用这个方法。如果您在项目中使用此方法,则不需要使用urlLogin 数据,但您可以定义使用自动提交(在挂载钩子中)或使用按钮提交数据时的条件。如果您使用了我发布的脚本并且您的问题仍然存在,我想问题来自CORS policy,它有自己的解决方案取决于您的后端结构。例如,如果您在后端使用php,我认为this question 是一个很好的解决方案。

【讨论】:

以上是关于从api设置值后如何自动提交表单的主要内容,如果未能解决你的问题,请参考以下文章

fastadmin: layer.open 弹出层如何在表单提交之后自动关闭?

layui表单如何提交下拉框的键值

提交表单后如何自动创建客户表

自动提交表单时,如何添加标题?

自动提交表单

填充所有值后如何自动调用函数