【问题标题】:How to recieve data from a ajax post request如何从 ajax 发布请求中接收数据
【发布时间】:2021-04-29 13:03:25
【问题描述】:

我是 ajax/jquery 的新手,我正在尝试将带有 ajax/jquery 的发布请求的变量发送到服务器,然后控制台记录它。

但由于某种原因,当我再次从服务器控制台记录它时,它仍然未定义,那么我该如何正确发送并检索它?

代码inventory.js:

$('form').on('submit', function() {

  var temp = {test: 0}

  $.ajax({
    type: 'POST',
    url: '/inventoryactionbtn',
    data: temp,
    success: function(data) {
      //do something with the data via front-end framework
    }
  });

  return false;
})

Index.js:

router.post('/inventoryactionbtn',  ensureAuthenticated, function(req, res) {
  var testing= req.body
  console.log(testing)
})

【问题讨论】:

  • {temp:0} 变量可根据对inventory 的处理请求而不是inventoryactionbtn 提供
  • 我将 url 更改为:'/inventoryactionbtn' 但现在它只给了我一个空的 {} 。我该如何解决?
  • 你在哪里改的?在你的帖子中我看到url: '/http://localhost:5000/inventory'
  • 在我的 Visual Studio 代码项目中:)。现在也在帖子中。
  • 那么我该如何修复空的 {} 呢?

标签: javascript jquery node.js express


【解决方案1】:

存在三个问题:

你没有运行你的客户端 JS

$('inventoryactionbtn')

将匹配 HTML 中不允许的 <inventoryactionbtn> 元素。可能您打算将其用作 ID 或类选择器,因此您需要适当的前缀。

submit 事件仅在 <form> 元素上触发,因此由于您的目标是名称中带有 btn 的东西,因此您可能定位到了错误的元素。

你需要一个body解析中间件

the API reference:

包含在请求正文中提交的数据键值对。默认为undefined,当您使用express.json()express.urlencoded() 等正文解析中间件时填充。

在您提供的代码中没有任何正文解析中间件的迹象。您需要使用一些与您发布的数据格式相匹配的内容。

您需要正确获取网址

/http://localhost:5000/inventory,即使你去掉前面的/,也不匹配(无论你在哪里安装了路由器+)/inventoryactionbtn

【讨论】:

  • 好的,现在我添加了这两个: var bodyParser = require('body-parser') var urlencodedParser = bodyParser.urlencoded({extended: true}) 但现在我只收到一个空的 {} .我该如何解决?
  • 不推荐使用外部 body-parser 模块,请使用 Express 内置的模块。如果你不use 它,创建一个body 解析器是没有意义的。有关示例,请参阅答案中的 API 参考链接。您仍然需要获取要发布到的 URL 以匹配路由。
  • 好吧,我现在正在使用这个:router.use(express.json()) 和 router.use(express.urlencoded({extended: true }))。我将inventoryactionbtn 更改为form,但我仍然得到一个空的{}。我在这里做错了什么?
猜你喜欢
  • 2017-03-22
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
相关资源
最近更新 更多