Я сделал кнопку для отправки некоторых данных POST с помощью JQuery. Он просто отправляет "name": "kevin" через json.
$(document).ready(function() {
$('#clickMe').on('click', function() {
var data = {};
data.name = "kevin";
$.ajax({
type: "POST",
data: JSON.stringify(data),
contentType: 'application/json'
});
});
});
Мой сервер берет это и пересылает вывод в console.info
const express = require('express');
const app = express();
var bodyParser = require('body-parser');
var port = 8080;
app.use(express.static('public'));
app.use(bodyParser.json());
app.post('/', (req, res) => {
console.info(req.body.name);
});
app.listen(port);
console.info('Listening on http://localhost:' + port)
Моя проблема в том, что console.info (req.body.name) выводит ДВЕ вещи вместо одной ... и я не уверен, почему. Мой вывод на консоль выглядит следующим образом:
Kevin
Undefined
Сделайте alert("test") после $('#clickMe').on('click', function() { и посмотрите, сработает ли он один или два раза.
Также попробуйте добавить к своему мероприятию stopPropagation(); и preventDefault(); и посмотрите, что это даст.
Удаление POST и отправки с моей кнопки помогло. Спасибо, что предположили, что это был двойной пост !!
Если вы просто удалите method='post' из вашей формы и type='submit' из вашей кнопки, это не очень элегантное решение. Ваш AJAX будет отправлен, но ваша форма все равно будет запущена и перезагрузит страницу (даже если она действительно больше не отправляет данные). Вы должны прочитать мой ответ.



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


Ваш API в порядке, ответьте на app.post () и попробуйте. Проверьте свою DOM, если есть два события или что-то в этом роде.
Код, который вы показываете, хорош. Для уверенности вам необходимо предоставить HTML-часть.
Одна из причин, по которой у вас может быть такой результат, - это такой код:
<form action='/' method = "post">
<button id = "clickMe" type = "submit">submit</button>
</form>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#clickMe').on('click', function() {
var data = {};
data.name = "kevin";
$.ajax({
type: "POST",
data: JSON.stringify(data),
contentType: 'application/json'
});
});
});
</script>
Здесь будет отправлен запрос AJAX (с data.name = "kevin"), затем будет отправлена форма (без свойства data.name, поэтому значение undefined).
Решение в этом случае - запретить отправку формы с event.preventDefault(); или return false;:
$(document).ready(function() {
$('#clickMe').on('click', function(e) {
e.preventDefault();
var data = {};
data.name = "kevin";
$.ajax({
type: "POST",
data: JSON.stringify(data),
contentType: 'application/json'
});
// OR
// return false;
});
});
Вы также можете просто удалить часть формы и оставить только кнопку: <button id = "clickMe">click here</button>. Здесь форма не будет отправлена, поэтому нет необходимости в event.preventDefault(); или return false;.
Вы также можете просто использовать форму, добавив ввод и удалив часть JS, но это будет просто классическая отправка формы.
IMO, POST api получает дважды. Ваш
formтоже отправляется? Думаю нуженevent. stopPropagation