I am trying to get axios.post
to work in vue 3
with laravel 8
as backend but I am getting a POST http://localhost:3000/contact 500 (Internal Server Error)
.
This is my vue component
(without css):
<template> <section class="contact"> <form @submit.prevent="storeContact"> <input type="text" placeholder="Name" v-model="name"> <input type="text" placeholder="Email" v-model="email"> <input type="text" placeholder="Message" v-model="message"> <button action="post" type="submit">Submit</button> </form> </section> </template> <script> import {ref} from "vue"; export default { setup() { let success = false; let error = false; const name = ref(null); const email = ref(null); const message = ref(null); function onSuccess(msg) { success = true; }; function onFailure(msg) { error = true; }; function storeContact() { axios.post('post', { name: 'name', email: 'email', message: 'message' }) .then((res) => { onSuccess(res.data.message) }) .catch((error) => { onFailure(error.response.data.message) }) }; return { success, error, name, email, message, storeContact } } } </script>
In addition, is there a way to use an array
instead of properties
inside of axios.post
like so:
axios.post('post', [name, email, message]).then(...
Advertisement
Answer
Try like following if You need to pass array to axios post :
<template> <section class="contact"> <form> <input type="text" placeholder="Name" v-model="user.name"> <input type="text" placeholder="Email" v-model="user.email"> <input type="text" placeholder="Message" v-model="user.message"> <button @click.prevent="storeContact">Submit</button> <p v-if="error">{{ error }}</p> </form> </section> </template> <script> import {ref} from "vue"; export default { setup() { let success = false; let error = ''; const user = ref({ name: '', email: '', massage: '' }); function storeContact() { axios.post('Your-API-URL', Object.values(user.value)) .then((res) => { console.log(res.data) success = true }) .catch((error) => { error = error.data.message ) }) }; return { success, error, user, storeContact } } } </script>