将表单数据发送到节点服务器

时间:2016-03-31 02:28:49

标签: javascript jquery ajax node.js forms

我正在尝试将一些表单数据发送到端点。

这是我的客户端代码:

<form name="form" action="http://localhost:8080/geodata" method="post"> 

        <label for="minlat"> MinLat: </label>
        <input type="text" name="MinLat" value="0"><br>
        <label for="maxlat"> MaxLat: </label>
        <input type="text" name="MaxLat" value="1"><br>
        <label for="minlong"> MinLong: </label>
        <input type="text" name="MinLong" value="0"><br>
        <label for="maxlong"> MaxLong: </label>
        <input type="text" name="MaxLong" value="1"><br>

        <button type="submit" class="btn btn-success"> Submit <span class="fa fa-arrow-right"></span></button>

        </form>

    <script>

    $(document).ready(function() {
        $("#form")
            .submit(function(event) {

                var formData = {
                'minLat'            : $('input[name=MinLat]').val(),
                'maxLat'            : $('input[name=MaxLat]').val(),
                'minLong'           : $('input[name=MinLong]').val(),
                'maxLong'           : $('input[name=MaxLong]').val()
                 };

                $.ajax({
                    url: $form.attr('action'),
                    data: formData,
                    cache: false,
                    dataType: 'json',
                    processData: false,
                    type: 'POST',

                    }).done(function(data) {

                        console.log(data);
                    });
                event.preventDefault();
            });
    });
    </script>

我在服务器端代码(express.js)上有一个enpoint:

var express = require("express");
var path = require("path");
var bodyParser = require("body-parser"); 

var app = express();
app.use(express.static(__dirname + "/public"));
app.use(bodyParser.json());
  // Initialize the app.
var server = app.listen(process.env.PORT || 8080, function () {
    var port = server.address().port;
    console.log("App now running on port", port);
});

app.post("/geodata", function(req, res) {
    console.log(req.body);
    res.send("hi");
});

我希望将此表单数据发送到端点/地理数据,并使用该数据将结果发送回客户端。首先,当我点击提交时,我在终端中得到一个空{}(这是服务器端request.body)。我期待这个请求中的表单值。但是没有收到它们。如何确保我的表单值被发送?

其次,res.send(&#34; hi&#34;)将我的初始页面重定向到新页面并打印&#34; hi&#34;那里。由于我已经进行了ajax调用,因此不应该记录响应并且网页保留在初始页面上吗?

2 个答案:

答案 0 :(得分:1)

将表单操作更改为“/ geodata”(端点)

你也不需要提出ajax请求,因为如果按下/点击标签(),HTML5表单将自己执行请求。

点击顶峰后,您的页面将成为从“/ geodata”路线发回的响应 并且req.body将返回一个表示表单数据的对象

答案 1 :(得分:0)

dataType:'json'表示您期望来自服务器的json数据。删除dataType,并添加此

  data : JSON.stringify(formData),
  contentType: 'application/json',

contentType将是您要发送到服务器的数据类型。