Я не могу сделать POST-запрос в Vue.js. Это вызывало у меня проблемы с CORS, но я добавил
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
к API, и они ушли. Я могу получать действительные ответы от API с помощью Postman, используя тот же адрес электронной почты и пароль (Postman игнорирует CORS).
Вот мой запрос на получение:
<script>
export default {
data () {
return {}
},
methods : {
login : function () {
console.info('Logging in');
// axios({
// method : 'post',
// url : 'https://www.example.com/login',
// headers : {'content' : 'application/json'},
// data : {
// email : 'emailHere',
// password : 'passwordHere'
// }
// })
// .then(function (response) {
// console.info(response);
// })
// .catch(function (error) {
// console.info(error);
// });
fetch('https://www.example.com/login', {
method: 'POST',
body: JSON.stringify({
email : 'emailHere',
password : 'passwordHere'
})
})
.then((res) => res.json())
.then((data) => console.info(data))
.catch((err) => console.error(err))
}
}
}
</script>
https://www.example.com/api/v1/authenticate/login 404 (Not Found)
{status: false, message: "Invalid credentials"}
Я попробовал Axios, но все равно выдает 404, но не отвечает "Invalid Credentials".
В других приложениях я успешно использовал jquerys ajax с тем же API, поэтому API, похоже, разрешает запросы javascript. Но Fetch и Axios это не нравится.
У меня есть компонент Login.vue с кнопкой
<a id = "login-btn" @click.prevent = "login">{{ $t('loginPage.loginButtonText') }}</a>
Любая помощь будет оценена по достоинству! Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам не хватает заголовка Content-Type. Попробуйте установить заголовки в своем запросе. Fetch требует, чтобы вы явно задавали заголовки, поскольку это низкоуровневый API. Ваш сервер может отклонить, так как он не распознает соответствующий Content-Type. Попробуй это:
fetch('https://www.example.com/login', {
method: 'POST',
// THIS IS IMPORTANT
headers: new Headers({
'Content-Type': 'application/json',
'Accept': 'application/json',
}),
body: JSON.stringify({
email : 'emailHere',
password : 'passwordHere'
})
})
Также помните о двух вещах с fetch:
Первое получение 404 с помощью fetch не означает, что ваш запрос не удался. Если сервер отвечает на ошибку 4xx или 5xx, выборка считается успешной. Только при возникновении сетевой ошибки выборка отклоняется. Таким образом, если вы получаете 404, это означает, что запрос достиг сервера, но есть проблема на стороне клиента.
Во-вторых, попробуйте установить mode на corsв запросе получения. Думал, что значение mode по умолчанию - cors.
Я включил jquery в индексный файл и сделал запрос POST с такими же параметрами. Он работал, как ожидалось, и вернул ответ с данными. $ .ajax ({url: 'example.com/login', тип: 'post', данные: {email: 'emailHere', пароль: 'passwordHere'}, успех: function (result) {console.info (result);}}) ;
Вот ответ на ваше предложение. Не удалось загрузить example.com/login: ответ для предварительной проверки имеет недопустимый код состояния HTTP 404. TypeError: не удалось получить.
@BrianBarton, это странно. Нужно подумать, почему это могло происходить.
Есть другие мысли?
@BrianBarton, Ничего не могу предложить в данный момент. Вещи выглядят прекрасно.
Спасибо за ответ! Пробовал и по отдельности, и вместе, дает другой ответ, но все равно 404.