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

标签 javascript jquery node.js express

我制作了一个按钮来使用 Jquery 提交一些 POST 数据。它只是通过 json 发送一个“name”:“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

最佳答案

您展示的代码很好。您需要提供 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 部分来使用表单,但这只是一个经典的表单提交。

关于javascript - 为什么我得到两个输出,其中之一未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52634660/

相关文章:

JavaScript 重置事件

node.js - 如何使用 MongoDB Geospatial 选择查询中的字段?

php - PowerBI CLI Node : No such file or directory

javascript - Jquery - 尝试在 div 中选择图像

Javascript document.write() 指向另一个页面

javascript - 无法在 HighCharts 图表中获取系列 ID

javascript - 使用 AJAX 加载 Bootstrap 选择器

javascript - Golang 和 JavaScript 模块

javascript - scrollTo 函数在 JSfiddle 中运行流畅但在我的页面上运行不流畅

node.js - 异步eachLimit和同时RangeError : Maximum call stack size exceeded