首页 > 解决方案 > 如何将ajax post数据传递给nodejs服务器?

问题描述

因此,我正在进行 API 调用,并且该调用中的一个对象是唯一 ID。我正在尝试使用 Ajax 将该 ID 对象传递回服务器端。它不工作。我究竟做错了什么?

这是我的客户端代码,首先我遍历一个 javascript 对象:

<% apiResultsdata['items'].forEach(function(items) { %>

    <% let ID = items['id'] %>
    <% let volumeInfo = items['volumeInfo'] %>
    <% let author = volumeInfo['authors'] %>
    <% let title = volumeInfo['title'] %>
    <% let image = null %>
    <% if(!(volumeInfo['imageLinks'] === undefined)) { %>
      <% image = volumeInfo['imageLinks']['smallThumbnail'] %>
 <% } %>

ID 是单击链接后我需要传回 nodejs 的内容:

<div class="col">
                <div class="card-block px-2">
                  <a  href="/bookDetails"><h5 class="card-title"><%= title %></h5></a>


                  <script type="text/javascript">
                      $('a').click(function() {
                        $.ajax({
                          type: 'post',
                          data: {'ID':'<%= ID %>'},
                          url: 'localhost:3000/bookDetails',
                          success: function(data){
                            console.log('success');
                          }
                        });
                      });
                  </script>

在我提交的数据中,我将 ID 作为 ejs 对象传递,因为那是我正在使用的模板语言。不确定这是否正确。

这是服务器上的发布路线:

router.post('/bookDetails', (req, res) => {
  let ID = req.query.ID;
  console.log('ID: ' + ID);
});

标签: javascriptjquerynode.jsajaxejs

解决方案


在传递给数据字段之前,您需要设置contentType和对象。JSON.stringify检查这个线程

$.ajax({
    type: 'post',
    contentType: "application/json; charset=UTF-8",
    data: JSON.stringify({ ID: '<%= ID %>' }),
    url: 'localhost:3000/bookDetails',
    success: function(data) {
        console.log('success');
    }
});

在服务器端使用 json-parser 中间件总是一个好主意

const bodyParser = require('body-parser');
app.use(bodyParser.json());

然后就可以得到包含ID参数的请求体如下

router.post('/bookDetails', (req, res) => {
  let ID = req.body.ID;
  console.log('ID: ' + ID);
});

推荐阅读