Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我得到两个输出,其中一个未定义?_Javascript_Jquery_Node.js_Express - Fatal编程技术网

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

Javascript 为什么我得到两个输出,其中一个未定义?,javascript,jquery,node.js,express,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.stringi

我制作了一个按钮,用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

您的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>
您也可以简单地删除表单部分,只需按下按钮:
单击此处
。此处不提交表单,因此不需要
event.preventDefault()
返回false


您也可以通过添加输入和删除JS部分来使用表单,但这只是一个典型的表单提交。

IMO,POST api已经两次受到攻击。您的
表单也将被提交?我认为您需要在
$('#clickMe')之后执行
警报(“测试”)
。在('click',function(){
上,查看它是否触发一次或两次。还可以尝试添加
stopPropagation();
preventDefault()
到您的活动,看看它会起什么作用。从“我的”按钮中删除POST和submit成功了。感谢您建议这是一个双重POST!!如果您只是从表单中删除
method='POST'
,并从按钮中删除
type='submit'
,这不是一个非常优雅的解决方案。您的AJAX将被提交,但您的表单仍将被删除你应该阅读我的答案。
$(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;
  });
});