【问题标题】:POST Ajax calls with Node, express & vanilla JS使用 Node、express 和 vanilla JS 发布 Ajax 调用
【发布时间】:2018-03-06 10:05:03
【问题描述】:

我正在尝试使用 vanilla JS 进行一些 ajax 调用。 在后端,我正在使用 express-framework 中的节点。

我想发送的数据似乎从未真正到达我的后端。有人知道发生了什么吗?

我的 Javascript

<form id='ajax_form' method='POST' action='/admin/new/tag'>
        <input type='text' name='tag' id="tag">
        <button type='submit'>Create new tag</button>
</form>

<script>
    var ajaxForm = document.querySelector("#ajax_form").addEventListener("submit", function(e){
                    e.preventDefault();
                    var form = e.target;
                    var data = new FormData(form);
                    var request = new XMLHttpRequest();
                    request.onreadystatechange = function(){
                        if(request.response){
                        [...]
                        }
                    }
                    request.open(form.method, form.action)
                    request.send(data);
            });
</script>

当我遍历数据对象时,一切似乎都正常,返回了我想通过表单提交的键和值。

这是我的后端设置:

var express = require("express"),
    app = express(),
    mysql = require("mysql"),
    bodyParser = require("body-parser");

app.use(bodyParser.urlencoded({extended: true}));


app.post('/admin/new/tag', function(req, res){
    var tag = {tag_name: req.body.tag};
    var q = 'INSERT INTO tags SET ?';
    connection.query(q, tag, function(error, results, fields){
        if (error) throw error;
        res.send('succeed');
    });
});

当我console.log(req.body.tag) 时,我只得到Undefinedreq.body 只是一个空对象。 我的数据库也抛出了一个错误,因为键 tag_name 不应该为 NULL。

当我查看网络面板时,我收到 503 服务不可用

感谢您的回复和意见!

【问题讨论】:

  • 是否支持 action='/...'?是网址吧?它不能是/...
  • 我只是认为这些对我的问题并不重要,所以我省略了它们。支持它们。我最初将其设为正常的后期请求,然后一切正常。如果需要,我可以添加 url:s。
  • 是的!请添加正确的代码以避免混淆。尝试控制台记录请求对象。如果你得到一些东西,请寻找 req.body
  • 那么,当您在控制台的网络面板中检查请求时,您会看到什么?

标签: javascript node.js ajax express


【解决方案1】:

在服务器端,您可以使用multer 来处理多部分/表单数据。

或者,您可以像这样将 JSON 格式的数据发送到服务器:

var xhr = new XMLHttpRequest();
var data = {
    param1: 'value1',
    param2: 'value2'
};
xhr.open('POST', '/query');
xhr.onload = function(data) {
    console.log('loaded', this.responseText);
};
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify(data));

服务器端设置bodyParser为JSON

app.use( bodyParser.json() );

现在你应该可以通过req.body..语法读取值了。

【讨论】:

  • 我已经在我的应用程序中使用了 multer,所以我选择了那个选项。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
相关资源
最近更新 更多