为什么我得到两个输出,其中一个未定义?

时间:2018-10-03 19:48:29

标签: javascript jquery node.js express

我做了一个按钮,用Jquery提交了一些POST数据。它只是通过json发送一个“名称”:“ kevin”。

$(document).ready(function() {
    $('#clickMe').on('click', function() {
        var data = {};
        data.name="kevin";
        $.ajax({
            type: "POST",
            data: JSON.stringify(data),
            contentType: 'application/json'
        });
    });
});

我的服务器接受此请求并将输出泵送到console.log

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.log(req.body.name);
});


app.listen(port);
console.log('Listening on http://localhost:' + port)

我的问题是console.log(req.body.name)输出两件事,而不是一件事……而且我不确定为什么。我的控制台输出如下所示:

Kevin 
Undefined

2 个答案:

答案 0 :(得分:1)

您显示的代码很好。您需要确保提供HTML部分。

获得此结果的原因之一就是拥有这样的代码:

r=sqrt(dAstX**2 + dAstY**2)

在这里,将提交AJAX请求(使用<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> ),然后还将提交表单(不使用data.name属性,因此为data.name = "kevin"值)。

在这种情况下,解决方案是阻止使用undefinedevent.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();

您还可以通过添加输入并删除JS部分来使用表单,但这只是经典的表单提交。

答案 1 :(得分:0)

您的API正常,请在app.post()上添加一个响应,然后尝试一下。 验证您的DOM(如果有两个事件或类似事件)。